Andere Antworten sind toll, aber ich würde auch diesen Implementing Dependency Injection using Ninject Artikel weisen darauf hin,.
Dies ist einer der besten Artikel, die ich je gelesen habe, die Dependency Injection und Ninject mit einem sehr eleganten Beispiel erklärt.
Hier ist der Ausschnitt aus dem Artikel:
Below-Schnittstelle wird von unserer (SMSService) umgesetzt werden und (MockSMSService), im Grunde das neue Interface (ISMSService) die gleichen Verhaltensweisen beiden Dienste wie der Code aussetzen unten:
public interface ISMSService
{
void SendSMS(string phoneNumber, string body);
}
(SMSService) Umsetzung der (ISMSService) Schnittstelle zu implementieren:
public class SMSService : ISMSService
{
public void SendSMS(string mobileNumber, string body)
{
SendSMSUsingGateway(mobileNumber, body);
}
private void SendSMSUsingGateway(string mobileNumber, string body)
{
/*implementation for sending SMS using gateway*/
Console.WriteLine("Sending SMS using gateway to mobile:
{0}. SMS body: {1}", mobileNumber, body);
}
}
(MockSMSService) mit völlig unterschiedlichen Umsetzung die gleiche Schnittstelle:
public class MockSMSService :ISMSService
{
public void SendSMS(string phoneNumber, string body)
{
SaveSMSToFile(phoneNumber,body);
}
private void SaveSMSToFile(string mobileNumber, string body)
{
/*implementation for saving SMS to a file*/
Console.WriteLine("Mocking SMS using file to mobile:
{0}. SMS body: {1}", mobileNumber, body);
}
}
brauchen wir eine Änderung unserer (UIHandler) Klassenkonstruktors zu implementieren, um die Abhängigkeit durch sie passieren, indem Sie dies tun, der Code, der verwendet die (UIHandler) kann die konkrete Umsetzung von (ISMSService) bestimmen zu verwenden:
public class UIHandler
{
private readonly ISMSService _SMSService;
public UIHandler(ISMSService SMSService)
{
_SMSService = SMSService;
}
public void SendConfirmationMsg(string mobileNumber) {
_SMSService.SendSMS(mobileNumber, "Your order has been shipped successfully!");
}
}
Jetzt haben wir eine eigene Klasse erstellen müssen (NinjectBindings), die von (NinjectModule erbt). Diese Klasse ist dafür zuständig, Abhängigkeiten zur Laufzeit aufzulösen. Anschließend überschreiben wir das load-Ereignis, das zur Konfiguration der darin enthaltenen Bindung verwendet wird. Das Schöne an Ninject ist, dass wir unseren Code in (ISMSService), (SMSService) und (MockSMSService) nicht ändern müssen.
public class NinjectBindings : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<ISMSService>().To<MockSMSService>();
}
}
nun in UI Form Code, werden wir die Bindung für Ninject verwenden, die verwendet werden, die Implementierung bestimmen,:
class Program
{
static void Main(string[] args)
{
IKernel _Kernal = new StandardKernel();
_Kernal.Load(Assembly.GetExecutingAssembly());
ISMSService _SMSService = _Kernal.Get<ISMSService>();
UIHandler _UIHandler = new UIHandler(_SMSService);
_UIHandler.SendConfirmationMsg("96279544480");
Console.ReadLine();
}
}
der Code der Ninject Kernal wird nun mit aller Kette von Abhängigkeiten zu lösen Wenn wir den echten Dienst (SMSService) im Freigabemodus (in der Produktionsumgebung) anstelle des Scheindienstes verwenden möchten, müssen wir die Ninject-Bindungsklasse (NinjectBindings) nur ändern, um die richtige Implementierung zu verwenden, oder indem wir #if verwenden DEBUG-Richtlinie wie folgt:
public class NinjectBindings : Ninject.Modules.NinjectModule
{
public override void Load()
{
#if DEBUG
Bind<ISMSService>().To<MockSMSService>();
#else
Bind<ISMSService>().To<SMSService>();
#endif
}
}
Jetzt lebt unsere Bindungsklasse (NinjectBindings) ganz oben auf unserem Ausführungscode und wir können die Konfiguration auf einfache Weise an einem einzigen Ort steuern.
Auch finden What is Inversion of Control? einige sehr einfache Beispiele genannt IoC zu verstehen.
ninject ist ein Abhängigkeits-Injection-Framework. fange hier an: https: // github.com/ninject/ninject/wiki/Dependency-Injection-by-Hand für eine gute Einführung in das Konzept und wie man ninject verwendet – drch
Die Dokumentation im Wiki erklärt alles aus den Grundlagen. http://www.ninject.org/wiki.html – spender