Programmering

Arbejde med Unity Application Block

I lighed med Castle Windsor og StructureMap er Unity Application Block også en IoC (Inversion of Control) container. Unity Application Block fra Microsoft er en letvægtsforlængelig injektionsbeholder til afhængighed. Det giver support til konstruktørinjektion, ejendomsinjektion og også metodeopkaldsinjektion. I øvrigt blev Unity Application Block introduceret som en del af Enterprise Library.

Hvis du ikke er fortrolig med, hvad afhængighedsinjektion og inversion af kontrol handler om, er her en hurtig forklaring. Afhængighedsinjektion er en realisering af IoC-princippet. Både inversion af kontrol og afhængighedsinjektion er måder, der gør det muligt for dig at bryde afhængighederne mellem komponenterne i din applikation. Afhængighedsinjektionsprincippet siger, at modulerne på højt niveau i en applikation ikke skal afhænge af modulerne på lavt niveau; snarere skal begge afhænge af abstraktioner.

Unity Application Bloker designmål

Unity Application Block er en Dependency Injection (DI) beholder. Bemærk, at Unity Application Block ikke har nogen afhængighed af Enterprise Library-konfigurationssystemet. Derfor kan du bruge den som en selvstændig beholder til indsprøjtning af afhængighed uden for Enterprise Library, der installeres i dit system. Designmålene for Unity Application Block inkluderer følgende:

  1. Fremme af et modulært design gennem afkobling
  2. Leverer en hurtig, udvidelig, letvægtsafhængig injektionsbeholder
  3. Giv support til udvidelse gennem udvidelser
  4. Giv support til attributdrevet injektion
  5. Giv support til en intuitiv API til at oprette forbindelse til og arbejde med beholderen til afhængighedsinjektion

Kom godt i gang

I dette afsnit vil vi undersøge, hvordan vi kan komme i gang ved hjælp af Unity Application Block i vores applikationer. Det første trin skal være at få Unity Application Block installeret i dit system. Den nemmeste måde at installere dette bibliotek på er via NuGet. I forbindelse med denne illustration bruger vi et konsolapplikationsprojekt her. Følg disse trin for at opbygge den første applikation ved hjælp af Unity Application Block:

  1. Åbn Visual Studio IDE
  2. Opret et konsolprojekt, og gem det med et navn
  3. Højreklik på projektet i vinduet Solution Explorer
  4. Vælg "Administrer NuGet-pakker ..."
  5. Installer Unity NuGet Package Manager

Det er alt hvad du skal gøre for at sætte scenen for dig til at begynde at bruge Unity. Du er nu klar til at bruge Unity Application Block i dit projekt.

Oprettelse og løsning af objektafhængigheder ved hjælp af Unity-container

Du kan bruge Unity-beholderen til let at løse afhængigheder af et bestemt objekt som vist i det følgende kodestykke.

IUnityContainer container = ny UnityContainer ();

container.RegisterType ();

container.RegisterType ();

Når du registrerer typen af ​​et objekt i Unity-containeren, kan du angive levetiden. Hvis du ikke angiver nogen, bruges standardlevetiden. En livsstilsadministrator styrer levetiden for et registreret objekt. De typer af livsadministratorer, der understøttes af Unity Application Block, inkluderer: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager og ExternallyControlledLifetimeManager.

Overvej følgende grænseflade kaldet ILogger.

offentlig grænseflade ILogger

   {

streng GetLogTypeName ();

   }

ILogger-grænsefladen indeholder erklæringen om en metode med navnet GetLogTypeName (). FileLoger, DatabaseLogger og EventLogger klasser (angivet nedenfor) implementerer ILogger interface.

offentlig klasse FileLogger: ILogger

   {

offentlig streng GetLogTypeName ()

       {

returner "File Logger";

       }

   }

offentlig klasse DatabaseLogger: ILogger

   {

offentlig streng GetLogTypeName ()

       {

returner "Database Logger";

       }

   }

offentlig klasse EventLogger: ILogger

   {

offentlig streng GetLogTypeName ()

       {

returner "Event Logger";

       }

   }

Følgende kodeliste viser, hvordan du kan løse afhængigheder ved hjælp af UnityContainer.

statisk ugyldigt Main (streng [] args)

{

IUnityContainer container = ny UnityContainer ();

container.RegisterType ();

ILogger iLogger = container.Resolve ();

streng logType = iLogger.GetLogTypeName ();

Console.WriteLine (logType);

Console.Read ();

}

Bemærk, at "Container" i Unity Application Block er det objekt, der kan bruges til at oprette og injicere afhængigheder. Du kan registrere typer eller skrive tilknytninger med Unity-containeren ved hjælp af metoden RegisterType. Metoden Løs () bruges til at returnere en konkret forekomst af den type, der er registreret for den generiske type, der er nævnt ved hjælp af T. I kodeeksemplet angivet ovenfor returnerer metoden Løs () en forekomst af FileLogger-klassen.

En alternativ tilgang til at specificere Unity-integrationen er gennem konfiguration. Forudsat at du har angivet en container med navnet Container i din Unity-konfiguration, illustrerer følgende kodestykke, hvordan du kan kalde LoadConfiguration-metoden på containerinstansen i din kode.

streng containerName = "Container";

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