Gibt es eine Möglichkeit, eine einzelne Schnittstelle zu registrieren, die mit mehr als einer konkreten Klasse unter Verwendung von [Simple-Injector] und ohne Verwendung der Template-Schnittstelle implementiert wird?Mehrere Implementierungen mit einer einzigen Schnittstelle registrieren
sagen, wir haben zwei Klassen MyClass1
und Myclass2
und diese beiden Klassen implementieren IInterface1
Jetzt mit [simple-Injektor] wir diese
container.Register<IInterface1, Myclass1>();
container.Register<IInterface1, Myclass2>();
Umwandlung vorhandene Schnittstelle zu Template-Schnittstelle nicht in der Lage zu tun, waren ist ein harter Job auf der bestehenden Codebasis. Hoffentlich gibt es da etwas einfacher.
Problem SimpleInjector wird, nachdem mehrere Implementierungen für eine Schnittstelle registriert, gibt es keine Möglichkeit, die der registrierten Fälle angeben, sollten für eine bestimmte Schnittstelle zurückgeschickt werden. In Ihrem Beispiel können Sie nicht angeben, dass eine Instanz der Klasse Myclass2 zurückgegeben wird, wenn Sie nach IInterface1 gefragt werden. Andere IoC-Container wie Ninject ermöglichen es, jede Registrierung für den gleichen Dienst (Schnittstelle) zu "benennen", so dass Sie später bei der Lösungszeit eine Unterscheidung treffen können. – Lester
@Lester: Wenn Sie dies benötigen, vergewissern Sie sich, dass Sie das [Liskow-Substitutionsprinzip] (https://en.wikipedia.org/wiki/Liskov_substitution_principle) nicht verletzen, wenn Sie dies benötigen. Wie auch immer, hier finden Sie weitere Informationen zur Verwendung der [Registrierung mit Schlüsseleingabe in Simple Injector] (https://simpleinjector.readthedocs.org/en/latest/howto.html#resolve-instances-by-key). – Steven
@nemesv was ist, wenn wir eine Implementierung zu einer Zeit benötigen, z.B. Shoper-Klassenkonstruktor hat ICreditCard-Schnittstelle. Und 2 Klassen MasterCard und VisaCard implementieren ICreditCard. Shoper braucht eine Klasse auf einmal. Wie verwende ich IOC in diesem Szenario? –