2011-07-22 16 views
13

Widziałem w kilku przykładach kodu, w których ludzie używali IKernel zamiast używać IWindsorContainer. Dlaczego to?Dlaczego warto korzystać z IKernel przez IWindsorContainer?

Oto jeden z przykładów: http://docs.castleproject.org/(S(kwaa14uzdj55gv55dzgf0vui))/Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx

W powyższym przykładzie, że przyszedł do mnie ugryźć, bo dodał subresolver

Container.Kernel.Resolver.AddSubResolver(
     new CollectionResolver(Container.Kernel, true)); 

że pozwoli mi wstrzyknąć kolekcje ... ale jeszcze nie było pracy . Pomyślałem, że ponieważ używany był tylko model IKernel, nie mógł on korzystać z pełnych funkcji Windsora. Dlaczego ktoś chciałby używać jądra na pełnym kontenerze? Myślę, że jeśli zamierzasz wdrożyć Windsor, użyj pełnego kontenera. Czy się mylę? Czemu?

Odpowiedz

18

Istnieją powody historyczne. Pierwotnie projekt Castle miał dwa kontenery: MicroKernel (IKernel), który zapewniał wszystkie podstawowe funkcje i punkty rozszerzeń, oraz Windsor IWindsorContainer, który był opakowaniem wokół MicroKernel, zapewniającym dodatkowe funkcje (takie jak konfiguracja XML, proxy itd.) I owijał MicroKernel.

Zostały one później (w wersji 2.5) połączone w jeden projekt/zespół, ale aby uniknąć zerwania z istniejącymi użytkownikami, zachowano rozróżnienie.

+0

Dzięki za historię. Tak więc zakładam, że idę naprzód, jeśli powiem, że używam Windsora, naprawdę nie potrzebuję używać IKernala, chyba że używam czegoś, co konkretnie wymaga starego IKernela? – CrazyDart

+0

Czy to prawda, że ​​IKernel jest automatycznie rejestrowany, ale IWindsorContainer nie jest? –

+1

rodzaj. 'IKernel' jest dostępny jako zależność OOTB, IWindsorContainer nie jest, ponieważ jest interfejsem skierowanym do użytkownika –