Ich mag ioc. Früher verwende ich Spring in Java, jetzt möchte ich DI in C# verwenden. Ich fand castle.windsor. Aber es scheint keine Injektionsklasse zu geben.Kann ich Komponente ohne Schnittstelle einspeisen Windsor
Jetzt versuche ich das, aber scheitern .... Jemand, können Sie mir helfen, es zu beheben? Oder, sag mir, welches DI-Framework kann ich verwenden?
Program.cs
using System;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using Castle.Windsor;
namespace InjectionConsole
{
class Program
{
static void Main(string[] args)
{
var container = new WindsorContainer();
container.Install(new MainInstaller());
var service1 = container.Resolve<Service1>();
service1.Say();
// clean up, application exits
container.Dispose();
Console.ReadKey();
}
}
class MainInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly());
}
}
}
Service1.cs
using System;
namespace InjectionConsole
{
class Service1
{
private Service2 Service2 { get; set; }
public void Say()
{
Console.WriteLine("Hello, I m Service 1, let me call Service 2");
Service2.Say();
}
}
}
Service2.cs
using System;
namespace InjectionConsole
{
class Service2
{
public void Say()
{
Console.WriteLine("Hello, I m Service 2");
}
}
}
Der Hauptpunkt von "Inversion der Kontrolle" ist das Invertieren der Abhängigkeiten, so dass die abhängige Klasse von einer Schnittstelle eines Dienstes und nicht von der tatsächlichen Implementierung abhängt. Wenn Sie keine Schnittstellen verwenden, eliminieren Sie den Hauptvorteil von IOC-Containern und dem erwähnten Muster. –