Nehmen wir an, ich folgende Situation haben:Sollte ich Fabriken schreiben oder bedingte Registrierung in DI verwenden, wenn ich Abhängigkeiten mit verschiedenen Implementierungen auf verschiedenen Typen auflösen möchte?
Ich habe Downloader
Typ, der drei Abhängigkeiten wie IDep1
, IDep2
, IDep3
. Diese Abhängigkeiten haben 2 Implementierungen. Für IDep1
ist Dep1Impl1
und Dep1Impl2
etc. Je nach Typ, der Downloader
als Abhängigkeit hat, möchte ich Downloader
mit verschiedenen Implementierungen IDep
auflösen.
Was ist die beste Vorgehensweise, um so etwas zu tun? Es ist besser, eine Fabriken für IDep
's zu schreiben und Downloader
mit optimalen Parametern oder versuchen Sie bedingte Registrierung in DI? Oder gibt es dafür eine bessere Lösung?
EDIT:
Zur Verdeutlichung Downloader
ist die Abhängigkeit in ASP.NET MVC-Controller. Auf verschiedenen Controllern möchte ich verschiedene Implementierungen von IDep
in Downloader
.
EDIT2:
Ich weiß, in der Kompilierung welche Abhängigkeiten für jeden Downloader
gehen sollte. Und diese Abhängigkeiten sind für jeden Controller festgelegt, wo Downloader
Abhängigkeit ist. Also ich denke, Scott ist amwser die beste Lösung für diese Art von Problem.
Wie bestimmen Sie, welche Implementierung von 'Downloader' für jeden Controller benötigt wird? Wenn es sich auf einige bekannte Parameter bezieht, auf die Sie zur Laufzeit Zugriff haben, kann eine abstrakte Factory eine gute Wahl sein. Wenn es sich nur um ein deklaratives Szenario handelt, in dem ControllerA immer die gleiche Implementierung erhält und ControllerB immer eine andere erhält, dann hat Scott Hannen die beste Option. –
Die richtige Antwort hängt stark vom jeweiligen Anwendungsfall ab. Bitte beschreiben Sie, was bestimmt, wer welchen Downloader bekommt. Basiert dies auf der Anwendungskonfiguration? Haben Sie mehrere verschiedene Downloader in der gleichen Anwendung? Funktionieren die Konsumenten von Downloader immer noch korrekt, wenn sie einen anderen Downloader bekommen? – Steven
Haben Sie [diese FAQ?] (Http://autofac.readthedocs.org/en/latest/faq/select-by-context.html) gesehen? –