Ich schreibe eine Anwendung (über eine ASP.NET-Web-API verfügbar gemacht), deren gesamter Zweck es ist, zwei Datenquellen zu konsumieren und die Ähnlichkeiten und Unterschiede aufzudecken. So hat die API die folgende Konfiguration:Einfacher Injektor mit Abhängigkeit von zwei Objekten, die dieselbe Schnittstelle implementieren
public class FooController : WebAPI
{
public FooController(IFooRepository repoFromSourceA, IFooRepository repoFromSourceB)
{
...
}
}
Beibehaltung der Unterscheidung von denen einer der ist, die Quelle (Source A und SourceB kann nicht ausgetauscht werden) scheint zu verwenden container.RegisterCollection(..)
unmöglich (oder sehr gefährlich) zu machen. Außerdem, da eine Klasse beide Implementierungen verbraucht, scheint Decorator nicht passend zu sein.
Wie würde ich dann diese Abhängigkeitsinjektion einrichten?
Die wichtigste Frage, bevor jemand diese Frage beantworten kann, ist, was mit 'FooController' passieren würde, wenn die beiden Argumente (versehentlich) vertauscht werden. Wenn wir also 'neuen FooController (neues RepoB(), neues RepoA())' instanziieren (was kompilieren würde), würde 'FooController' noch immer korrekt funktionieren oder bricht es ab (eine Exception zum Beispiel auslösen)? – Steven
Es würde nicht brechen (keine Ausnahmen ausgelöst), aber die API würde den Anrufer lügen. Einige der Anrufe haben das Format "gib mir Gegenstände, die in A existieren, aber nicht in B." Wenn sie ausgetauscht wurden, würde der Aufrufer Objekte (oder keine Objekte) zurück erhalten, aber das Ergebnis wäre fehlerhaft. –