Programovanie

Práca s aplikačným blokom Unity

Podobne ako Castle Windsor a StructureMap je Unity Application Block tiež kontajnerom IoC (inverzia riadenia). Unity Application Block od spoločnosti Microsoft je ľahký rozšíriteľný kontajner na vkladanie závislostí. Poskytuje podporu pre vkladanie konštruktorov, vkladanie vlastností a tiež vkladanie volaní metód. Mimochodom, aplikačný blok Unity bol predstavený ako súčasť podnikovej knižnice.

Ak neviete, o čom je Injekcia závislostí a Obrátenie kontroly, tu je rýchle vysvetlenie. Dependency Injection je realizáciou princípu IoC. Inverzia riadenia aj vkladanie závislostí sú spôsoby, ktoré vám umožňujú prekonať závislosti medzi komponentmi vo vašej aplikácii. Princíp Dependency Injection uvádza, že moduly vysokej úrovne v aplikácii by nemali závisieť od modulov nízkej úrovne; oba by skôr mali závisieť od abstrakcií.

Ciele návrhu bloku Unity Application Block

Jednotkový aplikačný blok je kontajner Injection Dependency (DI). Upozorňujeme, že aplikačný blok Unity nemá žiadnu závislosť od konfiguračného systému Enterprise Library. Preto ho môžete použiť ako samostatný kontajner na vkladanie závislostí bez toho, aby bola do vášho systému nainštalovaná podniková knižnica. Ciele návrhu aplikačného bloku Unity zahŕňajú:

  1. Podpora modulárneho dizajnu prostredníctvom oddelenia
  2. Poskytnutie rýchlej, roztiahnuteľnej injekčnej nádoby so závislosťou na nízkej hmotnosti
  3. Poskytujte podporu rozšíriteľnosti prostredníctvom rozšírení
  4. Poskytnite podporu pre vstrekovanie riadené atribútmi
  5. Poskytnite podporu pre intuitívne rozhranie API na pripojenie a prácu s kontajnerom na vkladanie závislostí

Začíname

V tejto časti preskúmame, ako môžeme začať používať blok aplikácií Unity v našich aplikáciách. Prvým krokom by mala byť inštalácia Unity Application Block do vášho systému. Najjednoduchší spôsob inštalácie tejto knižnice je cez NuGet. Na účely tejto ilustrácie tu použijeme projekt konzolovej aplikácie. Ak chcete zostaviť prvú aplikáciu pomocou bloku aplikácií Unity, postupujte takto:

  1. Otvorte Visual Studio IDE
  2. Vytvorte projekt konzoly a uložte ho s názvom
  3. Kliknite pravým tlačidlom myši na projekt v okne Solution Explorer
  4. Vyberte možnosť „Spravovať balíčky NuGet ...“
  5. Nainštalujte si Unity NuGet Package Manager

To je všetko, čo musíte urobiť, aby ste pripravili pôdu pre začatie používania Unity. Teraz ste pripravení použiť Unity Application Block vo svojom projekte.

Vytváranie a riešenie závislostí objektov pomocou kontajnera Unity

Pomocou kontajnera Unity môžete ľahko vyriešiť závislosti na konkrétnom objekte, ako je znázornené v nasledujúcom útržku kódu.

Kontejner IUnityContainer = nový UnityContainer ();

container.RegisterType ();

container.RegisterType ();

Keď zaregistrujete typ objektu v kontajneri Unity, môžete určiť jeho životnosť. Ak žiadne nezadáte, použije sa predvolená životnosť. Doživotný správca riadi životnosť registrovaného objektu. Medzi typy doživotných správcov, ktorých podporuje Unity Application Block, patria: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager a ExternallyControlledLifetimeManager.

Zvážte nasledujúce rozhranie s názvom ILogger.

verejné rozhranie ILogger

   {

reťazec GetLogTypeName ();

   }

Rozhranie ILogger obsahuje deklaráciu jednej metódy s názvom GetLogTypeName (). Triedy FileLoger, DatabaseLogger a EventLogger (uvedené nižšie) implementujú rozhranie ILogger.

verejná trieda FileLogger: ILogger

   {

verejný reťazec GetLogTypeName ()

       {

návrat "File Logger";

       }

   }

verejná trieda DatabaseLogger: ILogger

   {

verejný reťazec GetLogTypeName ()

       {

návrat "Database Logger";

       }

   }

verejná trieda EventLogger: ILogger

   {

verejný reťazec GetLogTypeName ()

       {

návrat "Záznamník udalostí";

       }

   }

Nasledujúci zoznam kódov ukazuje, ako môžete vyriešiť závislosti pomocou UnityContainer.

static void Main (reťazec [] args)

{

Kontejner IUnityContainer = nový UnityContainer ();

container.RegisterType ();

ILogger iLogger = container.Resolve ();

string logType = iLogger.GetLogTypeName ();

Console.WriteLine (logType);

Console.Read ();

}

Upozorňujeme, že „kontajner“ v bloku aplikácie Unity je objekt, ktorý možno použiť na vytvorenie a vloženie závislostí. Typy a mapovania typov môžete zaregistrovať pomocou kontajnera Unity pomocou metódy RegisterType. Metóda Resolve () sa používa na vrátenie konkrétnej inštancie typu, ktorý je registrovaný pre generický typ uvedený pomocou T. V príklade kódu uvedenom vyššie metóda Resolve () vráti inštanciu triedy FileLogger.

Alternatívnym prístupom k špecifikácii integrácie Unity je konfigurácia. Za predpokladu, že ste vo svojej konfigurácii Unity zadali kontajner s názvom Container, nasledujúci úryvok kódu ilustruje, ako môžete volať metódu LoadConfiguration na inštancii kontajnera vo vašom kóde.

string containerName = "Kontajner";

Kontejner IUnityContainer = nový UnityContainer (). LoadConfiguration (containerName);

$config[zx-auto] not found$config[zx-overlay] not found