Rad s aplikacijskim blokom Unity

Slično Castle Windsoru i StructureMap, Unity Application Block također je IoC (Inverzija kontrole) spremnik. Blok aplikacije Unity tvrtke Microsoft lagan je proširivi spremnik za ubrizgavanje ovisnosti. Pruža podršku za ubrizgavanje konstruktora, ubrizgavanje svojstava i ubrizgavanje poziva metode. Inače, blok aplikacije Unity uveden je kao dio Enterprise Library.

U slučaju da vam nije poznato o čemu se radi ubrizgavanjem ovisnosti i inverzijom upravljanja, evo kratkog objašnjenja. Injekcija ovisnosti ostvarenje je IoC principa. I inverzija upravljanja i ubrizgavanje ovisnosti načini su koji vam omogućuju razbijanje ovisnosti između komponenata u vašoj aplikaciji. Načelo ubrizgavanja ovisnosti navodi da moduli visoke razine u aplikaciji ne bi trebali ovisiti o modulima niske razine; nego bi obje trebale ovisiti o apstrakcijama.

Ciljevi dizajna bloka aplikacije Unity

Blok aplikacije Unity spremnik je za ubrizgavanje ovisnosti (DI). Primijetite da blok aplikacije Unity ne ovisi o konfiguracijskom sustavu Enterprise Library. Stoga ga možete koristiti kao samostalni spremnik za ubrizgavanje ovisnosti bez Enterprise Library koja je instalirana u vaš sustav. Ciljevi dizajna Unity Application Blocka uključuju sljedeće:

  1. Promicanje modularnog dizajna razdvajanjem
  2. Pružanje brzog, proširivog spremnika za ubrizgavanje male ovisnosti
  3. Pružite podršku za proširivost kroz proširenja
  4. Pružiti podršku za ubrizgavanje na temelju atributa
  5. Pružite podršku za intuitivni API za povezivanje i rad sa spremnikom za ubrizgavanje ovisnosti

Početak rada

U ovom ćemo odjeljku istražiti kako možemo započeti s korištenjem Unity Application Blocka u našim aplikacijama. Prvi korak trebao bi biti instaliranje Unity Application Blocka u vaš sustav. Najlakši način za instaliranje ove knjižnice je putem NuGet-a. Za potrebe ove ilustracije ovdje ćemo koristiti projekt aplikacije konzole. Da biste izradili prvu aplikaciju pomoću bloka aplikacije Unity, slijedite ove korake:

  1. Otvorite Visual Studio IDE
  2. Izradite projekt konzole i spremite ga s imenom
  3. Desnom tipkom miša kliknite projekt u prozoru Solution Explorer
  4. Odaberite "Upravljanje NuGet paketima ..."
  5. Instalirajte Unity NuGet Package Manager

To je sve što biste trebali učiniti da biste postavili pozornicu za početak korištenja Unityja. Sada ste spremni za upotrebu bloka aplikacije Unity u svom projektu.

Stvaranje i rješavanje ovisnosti o objektima pomoću spremnika Unity

Spremnik Unity možete koristiti za lako rješavanje ovisnosti o određenom objektu kao što je prikazano u isječku koda koji slijedi.

IUnityContainer container = new UnityContainer();

container.RegisterType();

container.RegisterType();

Kada registrirate vrstu objekta u spremniku Unity, možete odrediti vijek trajanja. Ako ne navedete nijednu, koristi se zadani životni vijek. Životni menadžer kontrolira životni vijek registriranog objekta. Tipovi životnih upravitelja koje podržava Unity Application Block uključuju: TransientLifetimeManager, ContainerControllLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager i ExternallyControllLifetimeManager.

Razmotrite sljedeće sučelje nazvano ILogger.

public interface ILogger

   {

       string GetLogTypeName();

   }

Sučelje ILogger sadrži deklaraciju jedne metode nazvane GetLogTypeName (). Klase FileLoger, DatabaseLogger i EventLogger (dane u nastavku) implementiraju sučelje ILogger.

public class FileLogger : ILogger

   {

       public string GetLogTypeName()

       {

           return "File Logger";

       }

   }

   public class DatabaseLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Database Logger";

       }

   }

   public class EventLogger: ILogger

   {

       public string GetLogTypeName()

       {

           return "Event Logger";

       }

   }

Sljedeći popis koda pokazuje kako možete riješiti ovisnosti pomoću UnityContainer.

static void Main(string[] args)

{

IUnityContainer container = new UnityContainer();

container.RegisterType();

ILogger iLogger = container.Resolve();

string logType = iLogger.GetLogTypeName();

Console.WriteLine(logType);

Console.Read();

}

Imajte na umu da je "Spremnik" u aplikacijskom bloku Unity objekt koji se može koristiti za stvaranje i ubrizgavanje ovisnosti. Tipove ili preslikavanja tipova možete registrirati u spremniku Unity pomoću metode RegisterType. Metoda Resolve () koristi se za vraćanje konkretne instance tipa koji je registriran za generički tip spomenut pomoću T. U gore navedenom primjeru koda, metoda Resolve () vratit će instancu klase FileLogger.

Alternativni pristup specificiranju integracije Unity je putem konfiguracije. Pod pretpostavkom da ste u svojoj konfiguraciji Unity naveli spremnik nazvan Kontejner, sljedeći isječak koda ilustrira kako možete pozvati metodu LoadConfiguration na instanci spremnika u svom kodu.

string containerName = "Container";

IUnityContainer container = new UnityContainer().LoadConfiguration(containerName);