Czy istnieje sposób zarejestrowania pojedynczego interfejsu, który jest implementowany przez więcej niż jedną klasę betonu za pomocą [prostego wtryskiwacza] i bez korzystania z interfejsu szablonu?Rejestrowanie wielu implementacji za pomocą pojedynczego interfejsu
powiedzieć, mamy 2 lekcje MyClass1
i Myclass2
i obie te klasy realizują IInterface1
Teraz za pomocą [prosty wtryskiwacz] nie byliśmy w stanie to zrobić
container.Register<IInterface1, Myclass1>();
container.Register<IInterface1, Myclass2>();
konwersji istniejącego interfejsu do interfejsu szablonu jest ciężką pracą w istniejącym kodzie źródłowym. Mam nadzieję, że tam jest trochę łatwiej.
problem z SimpleInjector jest po rejestracji wielu implementacji dla jednego interfejsu, nie ma sposobu, aby określić, które z zarejestrowanych przypadków powinny być zwrócone do danego interfejsu. W swojej próbce nie można określić, aby zwracać instancję klasy Myclass2 podczas pytania o interfejs IInterface1. Inne kontenery IoC, takie jak Ninject, pozwalają "nazwać" każdą rejestrację dla tej samej usługi (interfejsu), dzięki czemu można je później rozróżnić w czasie rozwiązania problemu. – Lester
@Lester: Jeśli potrzebujesz tego, upewnij się, że nie naruszasz [zasady Liskov Substitution Principle] (https://en.wikipedia.org/wiki/Liskov_substitution_principle), jeśli tego potrzebujesz. Ale tak czy siak, oto więcej informacji o używaniu [rejestracja z kluczem w Simple Injector] (https://simpleinjector.readthedocs.org/en/latest/howto.html#resolve-instances-by-key). – Steven
@ co, jeśli potrzebujemy jednej implementacji na raz, np. Konstruktor klasy Shoper ma interfejs ICreditCard. A także 2 klasy MasterCard i VisaCard wdrażają ICreditCard. Shoper potrzebuje jednej klasy na raz. Jak korzystać z IOC w tym scenariuszu? –