Pytanie Określanie instancji dla rejestracji komponentu z Castle Windsor


Mam prawdopodobnie proste pytanie o Castle Windsor, którego nie używałem przez bardzo długi czas. Próbuję zarejestrować usługę z konkretnym wystąpieniem, które będzie pojedynczą implementacją usługi.

Kontener nie może próbować utworzyć implementacji samej usługi, ponieważ ma zależności, których kontener nie będzie w stanie rozwiązać. Mam instancję usługi i chcę, aby była to jedyna instancja używana dla każdego, kto zażądał usługi. Ale wydaje mi się, że mam bardzo mało szczęścia.

Natychmiast nabrałem nadziei, używając tego kodu:

container.Register(Component.For<IMyInterface>().Instance(serviceObj));

Ale wszystkie Castle robi z instancją to zrobić .GetType () na to i zarejestrować typ. Żądania usługi będą następnie powodować, że kontener spróbuje utworzyć ten typ i nie powiedzie się, gdy nie będzie w stanie wypełnić zależności.

Czy jest jakiś sposób, aby zrobić to, co chcę tutaj zrobić? Jeśli nie, stworzę jakiś IServiceProvider, który pobierze instancję usługi i nie będzie miał żadnych zależności, aby kontener mógł zostać wypełniony. Ale to wydaje się bardziej pracą niż właściwym rozwiązaniem.

Jakieś sugestie? Dzięki!


14
2018-05-29 09:53


pochodzenie




Odpowiedzi:


Spróbuj użyć AddComponentInstance metoda na obiekcie jądra kontenera. Myślę, że to jest to, czego potrzebujesz.


Proszę zanotować: Ta technika jest teraz przestarzała. Posługiwać się container.Register(Component.For<T>().Instance(myT)); zamiast (dzięki eouw0o83hf)


22
2018-05-29 10:02



Dzięki, Gerrie i Bojan! Pracował uczta. - Niall Connaughton
W skrócie ta technika jest teraz przestarzała. Posługiwać się container.Register(Component.For<T>().Instance(myT)); zamiast. - eouw0o83hf
To połączenie jest teraz również martwe - Liam
o problemach z dodawaniem instancji do interfejsu. działa, gdy próbuję zarejestrować go jako konkretną klasę - Sonic Soul


Możesz to zrobić poprzez Kernel właściwość pojemnika:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj);

2
2018-05-29 10:03