2009-03-11 13 views
4

Ich verwende Ninject, um mehrere Module zu laden. Wenn zwei Module versuchen, zwei verschiedene Implementierungen für eine Schnittstelle zu binden, löst ninject einen Fehler aus, dass Mehrfachbindung für einen -Dienst nicht zulässig sind.Ninject, mehrere Service-Bindungen

Alle anderen von mir verwendeten IoC-Frameworks (Unity, Windsor, Spring.net usw.) haben alle die Möglichkeit, mehrere Implementierungen für eine -Schnittstelle zu "registrieren".

Lassen Sie mich ein richtiges Beispiel geben:

public class HealtMonitorEmailAlertServiceModule : StandardModule 
{ 
    public override void Load() 
    { 
     this.Bind<IAlertService>().To<EmailAlertService>(); 
    } 
} 

public class HealtMonitorSmsAlertServiceModule : StandardModule 
{ 
    public override void Load() 
    { 
     this.Bind<IAlertService>().To<SmsAlertService>(); 
    } 
} 

public class Program 
{ 
    static void Main() 
    { 
     var emailService = new HealtMonitorEmailAlertServiceModule(); 
     var smsService = new HealtMonitorSmsAlertServiceModule(); 

     IKernel kernel = new StandardKernel(emailService, smsService); 
     kernel.Get<IAlertService>() 
    } 
} 

Die oben erzeugt eine Ausnahme, ich es erwarten würde den Typ in dem letzten Modul registriert lösen in den Kernel zu laden. Ich habe den gleichen Ansatz mit Autofac versucht und es funktioniert wie ich es erwartet habe.

Antwort

4

Ninject 2.0 hat diese Fähigkeit, aber Ninject 1.x nicht. Während 2.0 noch in der Beta-Phase ist, möchte ich Sie ermutigen, sich das einmal anzusehen, da 1.x in ein paar Monaten ausläuft.

+1

Danke für die Antwort Nate, ich werde Ninject 2.0 sehr kurz ausprobieren. Tolle Arbeit übrigens, ich bin beeindruckt von deinen Ninja-Fähigkeiten. –