2011-10-13 18 views
5

Buduję wtyczkę dla aplikacji innej firmy, a moja wtyczka wykorzystuje Autofac do łączenia różnych komponentów. Kontener jest budowany podczas uruchamiania aplikacji, ale aplikacja hosta wywołuje moje polecenia w późniejszym czasie.Czy elementy można tymczasowo zarejestrować w kontenerze Autofac?

Po wywołaniu polecenia aplikacja hosta udostępnia kilka instancji typów, które określa i które składniki będą musiały użyć. Chciałbym zarejestrować te wystąpienia w kontenerze, aby mógł zająć się okablowaniem komponentów zależnych od tych instancji.

Jestem świadomy, że mogę użyć ContainerBuilder do aktualizacji istniejącego kontenera, ale chciałbym usunąć te rejestracje po wykonaniu polecenia, ponieważ te instancje przestaną być poprawne. czy to możliwe?

Być może lepszym rozwiązaniem jest użycie 2 kontenerów ... Polecenie może utworzyć nowy kontener w celu zarejestrowania tych instancji, a inne składniki mogłyby zostać rozwiązane z kontenera o zasięgu aplikacji.

W jaki sposób mogę podłączyć 2 pojemniki, aby rozstrzygnąć połączenia bańką do kontenera o zasięgu aplikacji?

Czy są jakieś pułapki, o których należy pamiętać przy takim podejściu? Wyobrażam sobie, że mogą być problemy żywotność elementów ...

Edit: Teraz zrobiłem trochę więcej badań i prób i okazuje się, można po prostu użyć BeginLifetimeScope (Działanie <ContainerBuilder>) przeciążać zarejestrować aplikacja hosta zapewniała instancje tylko dla zagnieżdżonego okresu istnienia. Z jakiegoś powodu myślałem, że dodanie rejestracji do zagnieżdżonego życia spowoduje, że zostaną one dodane do kontenera głównego, ale wydaje się, że tak nie jest.

+0

Tak, LifetimeScope jest dokładnie tym, czego potrzebujesz w tym przypadku. Opublikuj odpowiedź na swoje pytanie i oznacz ją jako zaakceptowaną, aby inni, którzy znaleźli to pytanie, również otrzymają odpowiedź. –

+0

Dzięki, starałem się zamieścić moją odpowiedź wcześniej, ale TAK, powiedziałem, że muszę poczekać 8 godzin, ponieważ nie mam jeszcze wystarczająco punktów reputacyjnych ... –

+0

Yay! Mogę teraz opublikować odpowiedź, ale nie mogę jej zaakceptować do jutra ... –

Odpowiedz

3

Jak zauważono w mojej poprzedniej edycji, okazało się, że BeginLifetimeScope (akcja <ContainerBuilder>) jest dokładnie tym, czego potrzebuję. Z jakiegoś powodu myślałem, że dodanie rejestracji do zagnieżdżonego okresu życia spowoduje, że zostaną one dodane do kontenera głównego, a zatem będą rozwiązywane po zakończeniu zagnieżdżonego zakresu życia, ale wydaje się, że tak nie jest.

Powiązane problemy