Ninject: Injizieren von zwei verschiedenen Objekten desselben Typs

8

Wenn ich eine Klasse habe, die zwei Abhängigkeiten vom selben Typ hat (benötigt zwei verschiedene Instanzen), ist der einzige Unterschied zwischen den Instanzen eine tiefere Abhängigkeit, was ist der beste Weg, um Ninject DI auszuführen und die zwei Graphen zu behalten trennen?

Beispielobjektdiagramm:

%Vor%

Konstruktor der Klasse C :

%Vor%

Wie stelle ich also sicher, dass das mit ClassB instanziierte foo als ClassB dependancy foo und bar ... bar ?

bereitgestellt wird

Nur für einen Hintergrund, ich hatte einige Anforderungen ändern, also muss ich ein schreibgeschütztes Repository (IAdd) durch eine zusammengesetzte schreibgeschützte Repository

ersetzen %Vor%

Mit Spott, das war einfach genug, konnte ich nur mit Namen injizieren:

%Vor%

Das Problem kommt, wenn ich die echten Repositories verwende; foo und bar schreiben letztendlich in Dateien, so dass sie unterschiedliche Dateinamen benötigen. Da sie StreamWriter repositories sind, erhält eine ihrer Abhängigkeiten die zwei verschiedenen Dateinamen.

%Vor%

Der einzige Weg, den ich bis jetzt gefunden habe, ist, eine benannte FileName , genannt FileStreamWriterFactory , mit dem Namen StreamRepository × 2 (einmal für foo und einmal für bar ) zu erstellen. Das scheint sehr viel Arbeit zu sein, also hoffe ich, dass es eine bessere Lösung gibt.

Ich kann bei Bedarf eine neue Architektur erstellen, es war eine elegante Art, die Einträge schnell zu ergänzen, wenn sich die Anforderungen änderten. Ich bin mir bewusst, dass meine Klassen alle sehr spezifisch sind, aber ich denke, dass Single Responsibility dies allgemein unterstützen würde und in meinem Fall schreiben wir eine Menge kleiner Anwendungen und haben mehr Anfragen, die wir erfüllen können, also ist es ein guter Weg, viel wiederverwendbaren Code zu haben herumliegen, dass ich im Grunde nur für verschiedene Aufgaben neu konfigurieren muss.

Lösung
Remo Gloor sollte Kredit bekommen; Das ist wahrscheinlich die beste Praxis.

Was ich tatsächlich getan habe, war eine neue Erweiterung erstellen

%Vor%

Damit kann ich leicht kontrollieren, welche Datei in welches Repository importiert wird.

%Vor%

Es gibt wahrscheinlich eine bessere Lösung, also würde ich das nicht für andere empfehlen, aber es funktioniert gut für mich.

    
W3t Tr3y 22.02.2012, 22:44
quelle

1 Antwort

4

Ja, es gibt einen besseren Weg

Siehe Ссылка

Es ist 3.0, aber IsAnyAnchestorNamed kann auch mit 2.2 aus einer When-Bedingung verwendet werden.

    
Remo Gloor 23.02.2012, 09:36
quelle

Tags und Links