Bedingte Ninject-Bindung basierend auf dem Parametertyp

8

Ich verwende eine Factory, um einen Datasender zurückzugeben:

%Vor%

Ich habe zwei verschiedene Implementierungen von Datasender (WCF und Remoting), die verschiedene Typen haben:

%Vor%

Ich versuche, Ninject zu verwenden, um diese bestimmten Datasender-Typen basierend auf dem Verbindungstyp zu verknüpfen, der vom Parameter übergeben wurde. Ich habe folgendes erfolglos versucht:

%Vor%

Ich glaube, das liegt daran, dass ".When" nur eine Anforderung liefert und ich den vollständigen Kontext benötigen würde, um den tatsächlichen Parameterwert abrufen und seinen Typ überprüfen zu können. Ich weiß nicht, was ich tun soll, außer benannte Bindungen zu verwenden, die Fabrik tatsächlich zu implementieren und die Logik dort einzusetzen, d. H.

%Vor%     
Nathan Marlor 07.03.2013, 09:25
quelle

1 Antwort

6

Nachdem ich ein paar Ninject-Quellen untersucht habe, habe ich folgende gefunden:

  • a.Parameters.Single(b => b.Name == "connection") gibt Ihnen eine Variable vom Typ IParameter , kein realer Parameter.

  • IParameter hat die Methode object GetValue(IContext context, ITarget target) , die keinen Null-Kontextparameter erfordert (das Ziel kann null sein).

  • Ich habe keine Möglichkeit gefunden, IContext von Request zu erhalten (Variable a in Ihrer Stichprobe).

  • Context class hat keinen parameterlosen Konstruktor, daher können wir keinen neuen Kontext erstellen.

Damit es funktioniert, können Sie eine Pseudo-IContext-Implementierung wie folgt erstellen:

%Vor%

und dann benutze es

%Vor%

Es wäre schön, wenn jemand Informationen über das Erhalten von Context von innerhalb von When() ...

posten könnte     
Davor 07.03.2013, 12:03
quelle

Tags und Links