Do projektu dodajemy poniższą referencję:
using Microsoft.Practices.Unity;
Przykład użycia kontenera Unity:
using (var unityContainer = new UnityContainer()) { unityContainer.RegisterType<IEngine, DieselEngine>(); //Setter Injection unityContainer.RegisterType<IEngine, DieselEngine>(new InjectionProperty("Power", "100")); var car2 = unityContainer.Resolve<AudiA4>(); car2.Run(); }
Z przykładu tego wynikają dwa fakty. Po pierwsze, jeżeli chcemy dostać typ i prosimy o niego metodą Resolve, a jako parametr generyczny podajemy typ, a nie interfejs, to nie musimy takiego typu rejestrować. Po drugie możemy wstrzykiwać także pojedyncze propercje poprzez klasę InjectionProperty.
Jeżeli chcemy zarejestrować jakiś obiekt, jako singleton, to podajemy przez parametr sposób, w jaki kontener ma zarządzać takim obiektem. Domyślnie mamy typ TransientLifetimeManager, który za każdym razem tworzy nową instancję. Dla singletonów wybieramy ContainerControlledLifetimeManager.
using (var unityContainer = new UnityContainer()) { //Singleton unityContainer.RegisterType<IEngine, GasEngine>(new ContainerControlledLifetimeManager()); var car2 = unityContainer.Resolve<AudiA4>(); car2.Run(); }
Widzimy, że za Unity przemawia proste API zaspokajające podstawowe potrzeby przy wstrzykiwaniu zależności.
Brak komentarzy:
Prześlij komentarz