Ogólnie przyjmuje się, że przekazywanie kontenera IoC wokół aplikacji i używanie go jako lokalizatora usług jest złą praktyką.Czy można zastosować tryb życia w zamku Windsor bez przekazywania pojemnika?
Wolę używać kontenera tylko w złożonym katalogu głównym aplikacji i zwykle wykonuję pojedyncze wywołanie funkcji Resolve() - rozwiązywanie obiektu najwyższego poziomu w mojej aplikacji i odpowiadanie na kontener w celu wstrzyknięcia zależności do klas niższych wykres obiektu.
Castle Windsor ostatnio dodał tryb życia, w którym można wywołać container.BeginScope() w bloku "using". Z poziomu tego bloku "używanie", rozwiązanie komponentu, który został zarejestrowany w trybie o określonym zakresie, zwróci za każdym razem tę samą instancję, przez czas trwania bloku "używanie".
container.Register(Component.For<A>().LifestyleScoped());
using (container.BeginScope())
{
var a1 = container.Resolve<A>();
var a2 = container.Resolve<A>();
Assert.AreSame(a1, a2);
}
Pytanie: Zważywszy, że BeginScope() to metoda rozszerzenie na pojemniku, nie widzę w jaki sposób scoped styl życia może być używany w aplikacji, chyba że pojemnik jest przekazywana dookoła (co naprawdę don” t chcę zrobić). Czy ktoś ma jakieś przykłady, gdzie/w jaki sposób można wykorzystać styl życia?
Dzięki,
Tom
gdzie i dlaczego i dlaczego planujesz używać trybu życia z określonymi obszarami? –
Cześć Krzysztofie, nie mam żadnych planów, aby jeszcze skorzystać z trybu życia. Chciałem tylko zobaczyć kilka przykładów, jak można właściwie wykorzystać styl życia, na wypadek gdyby chciałem go wykorzystać w przyszłości. Myślę, że używanie go w fabrykach wydaje się logicznym podejściem. –
To wydaje się podobne do tego, czego potrzebuję, nie chcę rozpatrywać instancji o zasięgu, jako zależności w konstruktorach, obiektów o tym samym zakresie: http://stackoverflow.com/questions/25064516/dependency-injection-lifestyle- service-shared-instance-between-2 instance-of –