Podstawową przewagą nad Unity jest możliwość stworzenia własnych instalatorów - obiektów implementujących interfejs IWindsorInstaller. W instalatorze takim możemy skonfigurować część zależności. Podczas tworzenia kontenera mamy możliwość dodania wielu instalatorów.
public class AudiA4Installer : IWindsorInstaller { public void Install(IWindsorContainer container, IConfigurationStore store) { container.Register(Component.For<AudiA4>().LifeStyle.Transient); container.Register(Component.For<IEngine>() .ImplementedBy<DieselEngine>().LifeStyle.Transient); } }
Różnice w stosunku do Unity są dwie: musimy rejestrować typy o które prosimy bezpośrednio (nie przez interfejs), domyślny cykl życia obiektu to Singleton, dlatego konieczne jest ustawienie Transient - tworzenie nowej instancji przy każdym Resolve.
using (var windsorContainer = new WindsorContainer()) { windsorContainer.Install(new AudiA4Installer()); var car2 = windsorContainer.Resolve<AudiA4>(); car2.Run(); }
Castle Windsor wstrzykuje zarówno przez konstruktor jak i przez setter, tak więc klasa wyższego poziomu może być skonstruowana na dwa sposoby.
Brak komentarzy:
Prześlij komentarz