Korzystanie Windsor Castle, mam składnik skonfigurowany z przemijającego życia:Castle Windsor: Czy mój element przejściowy będzie zbiorem śmieci?
<component id="publish.mapping.default"
service="IMyService, MyAssembly"
type="MyServiceImplementation, Myassembly"
lifestyle="transient" />
które zostaną wykorzystane w ten sposób:
var service = container.Resolve<IMyService>(componentId);
// service usage ....
// service goes out of scope ...
Moje pytanie brzmi, czy instancja usługa będzie śmieci zebrane po nim wykracza poza zakres, czy też Zamek Windsor będzie trzymał się odniesienia? Znalazłem this similar question, co sugeruje, że to drugie może mieć miejsce - ale po zbadaniu zamieszczonych tam linków nie jestem pewien, czy dyskusja dotyczy zatrzymania odniesienia, czy też zapewnienia, że obiekt zostanie usunięty, jeśli implementuje IDisposable. Moje obiekty nie muszą być usuwane.
Jeśli Zamek Windsor trzyma się instancji, czy istnieje prosty sposób, aby temu zapobiec (być może przez konfigurację)?
EDIT
Wygląda na to, że muszę ustawić zasady śledzenia wersji. Czy można to skonfigurować w pliku konfiguracyjnym xml, czy też trzeba go ustawić w kodzie? Czy zasady śledzenia wersji mogą być ustawione dla poszczególnych komponentów?
Dzięki. Czy wiesz, czy można to skonfigurować dla każdego komponentu? (Zobacz edycję na moje pytanie) – driis
Nie sądzę. Właściwie nie używam Castle (chciałbym), ale dokumenty sugerują, że jest to Kernel. Nie jestem pewien, czy to jest właściwe, ale może być możliwe dodanie niestandardowej polityki zwracającej uwagę na typ komponentu ... –
Ustawienie zasady zwolnienia ma szeroki zakres. W rzeczywistości istnieją dokumenty, które określają, że ustawienie polityki zwolnienia jest jedną z pierwszych rzeczy, które należy zrobić po utworzeniu instancji kontenera. Jeśli ta reguła nie zostanie zastosowana, niektóre komponenty zostaną utworzone przy użyciu określonych zasad wydawania, a inne za pomocą innych. Może to spowodować wysokie prawdopodobieństwo spowodowania wycieków pamięci. – Chai