Programování

Práce s aplikačním blokem Unity

Podobně jako Castle Windsor a StructureMap je Unity Application Block také kontejnerem IoC (Inversion of Control). Unity Application Block od Microsoftu je lehký rozšiřitelný kontejner pro injekci závislostí. Poskytuje podporu pro vkládání konstruktorů, vkládání vlastností a také vkládání volání metod. Mimochodem, Unity Application Block byl představen jako součást Enterprise Library.

V případě, že nejste obeznámeni s tím, o čem je závislost injekce a inverze ovládání, zde je stručné vysvětlení. Dependency Injection je realizací principu IoC. Inverze ovládání i vkládání závislostí jsou způsoby, které vám umožňují přerušit závislosti mezi komponentami ve vaší aplikaci. Princip Dependency Injection uvádí, že moduly na vysoké úrovni v aplikaci by neměly záviset na modulech na nízké úrovni; spíše by oba měly záviset na abstrakcích.

Cíle návrhu bloku Unity Application Block

Blok aplikace Unity je kontejner Injekce závislostí (DI). Všimněte si, že Unity Application Block nemá žádnou závislost na konfiguračním systému Enterprise Library. Proto jej můžete použít jako samostatný kontejner pro injekci závislostí bez instalace Enterprise Library ve vašem systému. Cíle návrhu bloku aplikace Unity zahrnují následující:

  1. Podpora modulárního designu prostřednictvím oddělení
  2. Poskytování rychlého, rozšiřitelného, ​​lehkého závislého injekčního kontejneru
  3. Poskytujte podporu rozšiřitelnosti prostřednictvím rozšíření
  4. Poskytněte podporu pro injekci řízenou atributem
  5. Poskytněte podporu pro intuitivní rozhraní API pro připojení a práci s kontejnerem pro vkládání závislostí

Začínáme

V této části prozkoumáme, jak můžeme začít používat Unity Application Block v našich aplikacích. Prvním krokem by měla být instalace Unity Application Block do vašeho systému. Nejjednodušší způsob instalace této knihovny je prostřednictvím NuGet. Pro účely tohoto obrázku zde použijeme projekt konzolové aplikace. Chcete-li vytvořit první aplikaci pomocí Unity Application Block, postupujte takto:

  1. Otevřete IDE sady Visual Studio
  2. Vytvořte projekt konzoly a uložte jej pod názvem
  3. Klikněte pravým tlačítkem na projekt v okně Průzkumníka řešení
  4. Vyberte možnost „Spravovat balíčky NuGet ...“
  5. Nainstalujte Unity NuGet Package Manager

To je vše, co musíte udělat, abyste připravili půdu pro začátek používání Unity. Nyní jste připraveni použít Unity Application Block ve svém projektu.

Vytváření a řešení závislostí objektů pomocí kontejneru Unity

Pomocí kontejneru Unity můžete snadno vyřešit závislosti na konkrétním objektu, jak je znázorněno v následujícím fragmentu kódu.

Kontejner IUnityContainer = nový UnityContainer ();

container.RegisterType ();

container.RegisterType ();

Když zaregistrujete typ objektu v kontejneru Unity, můžete určit dobu životnosti. Pokud žádné nezadáte, použije se výchozí životnost. Životnost správce řídí životnost registrovaného objektu. Mezi typy doživotních správců podporovaných Unity Application Block patří: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager a ExternallyControlledLifetimeManager.

Zvažte následující rozhraní s názvem ILogger.

veřejné rozhraní ILogger

   {

řetězec GetLogTypeName ();

   }

Rozhraní ILogger obsahuje deklaraci jedné metody s názvem GetLogTypeName (). Třídy FileLoger, DatabaseLogger a EventLogger (uvedené níže) implementují rozhraní ILogger.

veřejná třída FileLogger: ILogger

   {

veřejný řetězec GetLogTypeName ()

       {

vrátit "File Logger";

       }

   }

veřejná třída DatabaseLogger: ILogger

   {

veřejný řetězec GetLogTypeName ()

       {

vrátit "Database Logger";

       }

   }

veřejná třída EventLogger: ILogger

   {

veřejný řetězec GetLogTypeName ()

       {

vrátit "Záznamník událostí";

       }

   }

Následující výpis kódu ukazuje, jak můžete vyřešit závislosti pomocí UnityContainer.

static void Main (řetězec [] args)

{

Kontejner IUnityContainer = nový UnityContainer ();

container.RegisterType ();

ILogger iLogger = container.Resolve ();

řetězec logType = iLogger.GetLogTypeName ();

Console.WriteLine (logType);

Console.Read ();

}

Všimněte si, že "Kontejner" v Unity Application Block je objekt, který lze použít k vytvoření a vložení závislostí. Typy a mapování typů můžete zaregistrovat pomocí kontejneru Unity pomocí metody RegisterType. Metoda Resolve () se používá k vrácení konkrétní instance typu, který je registrován pro obecný typ uvedený pomocí T. V příkladu kódu uvedeném výše vrátí metoda Resolve () instanci třídy FileLogger.

Alternativní přístup k určení integrace Unity je prostřednictvím konfigurace. Za předpokladu, že jste ve své konfiguraci Unity zadali kontejner s názvem Container, následující fragment kódu ukazuje, jak můžete volat metodu LoadConfiguration na instanci kontejneru ve vašem kódu.

string containerName = "Kontejner";

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

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