Wyobraźmy mam poniżej:Rejestrowanie pojedyncza poprzez SimpleInjector i powrót tego samego wystąpienia, dla różnych interfejsów realizuje
public interface IocInterface1 { }
public interface IocInterface2 { }
public class IocImpl : IocInterface1, IocInterface2 { }
chciałbym że jeśli staram się uzyskać jakiekolwiek wystąpienie powyższych klas/interfejsów poprzez IoC, otrzymuję dokładnie to samo wystąpienie, a nie jeden singleton na typ. Przykład, b1
i b2
poniżej powinny być prawdziwe:
_container.RegisterSingle<IocInterface1, IocImpl>();
_container.RegisterSingle<IocInterface2, IocImpl>();
_container.RegisterSingle<IocImpl, IocImpl>();
var test1 = _container.GetInstance<IocInterface1>();
var test2 = _container.GetInstance<IocInterface2>();
var test3 = _container.GetInstance<IocImpl>();
bool b1 = test1 == test2;
bool b2 = test2 == test3;
Czy to możliwe?
To wygląda dobrze na to, czego potrzebuję - czy jednak uwzględnia on również 'container.RegisterSingleOpenGeneric()'? Powodem jest to, że mam skaner montażowy, który skanuje wszystkie typy, które ja dekoruję atrybutem niestandardowym. Stworzyłem '[IocComponent]', a to również obsługuje open-generics. –
'RegisterSingleOpenGeneric' działa trochę inaczej, ponieważ tworzy rejestrację w locie w zdarzeniu' ResolveUnregisteredType' ... Muszę się zastanowić, jak można to zrobić bez zastępowania logiki metody "RegisterSingleOpenGeneric". Ale myślę, że powinieneś zadać to pytanie uzupełniające, w którym podajesz szczegółowe informacje o tym, jak działa skanowanie i jak próbuje zarejestrować typy ogólne. – nemesv
Zgadzam się z @nemesv: proszę zadać nowe pytanie z tymi szczegółami. Ta odpowiedź jest poprawna. +1 za to. – Steven