Ninject Multicasting

8

Ich möchte mehrere Implementierungen eines Service binden und alle auf einmal aufrufen:

%Vor%

Ninject mag das nicht und wirft eine Ausnahme über mehrere Bindungen. Gibt es eine Möglichkeit, dass ich diesen Fehler umgehen kann und alle Implementierungen aufgerufen habe?

Außerdem können sich die Bind<> -Aufrufe in verschiedenen Projekten befinden, die zur Laufzeit geladen werden können oder nicht, so dass das Erstellen einer einzelnen Implementierung, um sie aufzurufen, nicht funktioniert. Dies ist Teil einer Plug-in-Architektur für eine ASP.NET MVC 3-Website.

    
MikeWyatt 31.10.2011, 21:01
quelle

2 Antworten

12

Wenn Sie die Konstruktorinjektion verwenden und einen List<IBreakfast> -Parameter haben, erstellt Ninject eine Liste mit all Ihren Bindungen. Sie können dann Eat für diese Instanzen aufrufen.

Sie können dieses Muster verwenden, um Ninject dazu zu bringen, beispielsweise eine Liste Ihrer Plugins zu erstellen.

%Vor%

Ausgabe:

  

Eier
  Spam
  MoreSpam

    
Tim Lloyd 31.10.2011, 21:05
quelle
0

Sie können nicht viele konkrete Klassen an einzelne Schnittstellen binden, das ist gegen DI-Regeln.

Was Sie im Grunde tun möchten, ist, einige konkrete Instanzen zu initialisieren und ihre Methode aufzurufen.

Sie können dies überprüfen:

%Vor%     
Abdul Munim 31.10.2011 21:13
quelle