niedziela, 7 kwietnia 2013

[IoC] Unity

Unity jest kontenerem IoC dostarczanym przez firmę Microsoft. Można go spotkać, jako część biblioteki Enterprise Library, lub pograć managerem pakietów NuGet.


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