Wie kann ich in Ninject 2.0 sowohl eine allgemeine Bindung als auch eine Bindung für einen bestimmten Fall haben?

8

Ich habe eine Situation, in der ich mein Benutzerobjekt in Abhängigkeit injizieren möchte, aber auch den aktuellen Benutzer in den IoC-Container lege. Ich möchte, dass die folgenden Zeilen funktionieren:

%Vor%

Man könnte denken, dass Bindungen wie diese funktionieren würden:

%Vor%

Natürlich gibt das:

%Vor%

Ich verstehe den Fehler, da eine benannte Bindung die Anwendung dieser Bindung nicht einschränkt, so dass beide Bindungen gelten. Es scheint klar zu sein, dass ich die kontextabhängige Bindung mit den .When * () Methoden verwenden muss, aber ich kann keine Möglichkeit finden, dies zu tun. Ich habe das Gefühl, dass es Methoden geben sollte, die erkennen, ob eine benannte Instanz angewendet wird. Etwas wie:

%Vor%

Ich kann keinen Platz in der IRequest -Schnittstelle finden oder es ist die Eigenschaft, die mir den gewünschten Namen sagt. Wie mache ich das?

    
Jeff Walker Code Ranger 09.09.2010, 14:54
quelle

1 Antwort

3

Diese Frage wurde auf der Mailingliste beantwortet: Ссылка

Wenn Sie auf den Benutzer zugreifen, indem Sie Get auf dem Kernel aufrufen (was hoffentlich nicht der Fall ist), geben Sie der ersten Bindung ebenfalls einen Namen und greifen Sie auf den Benutzer immer mit dem Namen zu. Tatsächlich gibt es eine Möglichkeit, eine Instanz von der Bindung ohne einen Namen zu erhalten. Aber weil ich es wärmstens empfehle, dies nicht zu tun, zeige ich hier nicht, wie das geht. Wenn Sie es immer noch so machen wollen, erzähle ich Ihnen später, wie das funktionieren würde.

Wenn Sie es besser und bevorzugter machen und den Benutzer den Objekten injizieren, die es als Abhängigkeit benötigen, gibt es zwei Möglichkeiten:

  1. Der leichtere : Geben Sie der ersten Bindung einen Namen und fügen Sie den Parametern ein benanntes Attribut hinzu, z. ctor ([Benannt ("NewUser") IUser newUser, [Benannt ("Current")] IUser currentUser)
  2. Oder der bevorzugte Weg , um die Implementierungsklassen vom IoC-Framework frei zu halten: Spezifizieren Sie benutzerdefinierte Attribute und fügen Sie sie den Parametern hinzu, z. ctor ([NewUser] IUser neuer Benutzer, [CurrentUser] IUser currentUser). Ändern Sie die Bindungen zu:

    %Vor%
Remo Gloor 29.10.2010 11:33
quelle