Programmering

Arbeide med Unity Application Block

I likhet med Castle Windsor og StructureMap er Unity Application Block også en IoC (Inversion of Control) container. Unity Application Block fra Microsoft er en lett utvidbar injeksjonsbeholder for avhengighet. Det gir støtte for konstruktørinjeksjon, injeksjon av eiendom og også metodeanropsinjeksjon. Forresten ble Unity Application Block introdusert som en del av Enterprise Library.

Hvis du ikke er kjent med hva avhengighetsinjeksjon og inversjon av kontroll handler om, er det en rask forklaring. Avhengighetsinjeksjon er en realisering av IoC-prinsippet. Både inversjon av kontroll og avhengighetsinjeksjon er måter som gjør det mulig å bryte avhengigheten mellom komponentene i applikasjonen. Avhengighetsinjeksjonsprinsippet sier at modulene på høyt nivå i en applikasjon ikke skal avhenge av modulene på lavt nivå; heller bør begge avhenge av abstraksjoner.

Unity Application Block designmål

Unity Application Block er en Dependency Injection (DI) container. Merk at Unity Application Block ikke har noen avhengighet av Enterprise Library-konfigurasjonssystemet. Derfor kan du bruke den som en frittstående beholder for injeksjonsavhengighet uten Enterprise Library som installeres i systemet ditt. Designmålene til Unity Application Block inkluderer følgende:

  1. Fremme et modulært design gjennom frakobling
  2. Tilbyr en rask, utvidbar, lett avhengig injeksjonsbeholder
  3. Gi støtte for utvidbarhet gjennom utvidelser
  4. Gi støtte for attributtdrevet injeksjon
  5. Gi støtte for et intuitivt API for å koble til og arbeide med avhengighetsinjeksjonsbeholderen

Starter

I denne delen vil vi undersøke hvordan vi kan komme i gang med Unity Application Block i applikasjonene våre. Det første trinnet bør være å få Unity Application Block installert i systemet ditt. Den enkleste måten å installere dette biblioteket på er via NuGet. I forbindelse med denne illustrasjonen vil vi bruke et konsollapplikasjonsprosjekt her. Følg disse trinnene for å bygge den første applikasjonen ved hjelp av Unity Application Block:

  1. Åpne Visual Studio IDE
  2. Lag et konsollprosjekt og lagre det med et navn
  3. Høyreklikk på prosjektet i Solution Explorer Window
  4. Velg "Administrer NuGet-pakker ..."
  5. Installer Unity NuGet Package Manager

Det er alt du trenger å gjøre for å sette scenen for deg å begynne å bruke Unity. Du er nå klar til å bruke Unity Application Block i prosjektet ditt.

Opprette og løse objektavhengigheter ved hjelp av Unity-beholder

Du kan bruke Unity-beholderen til å løse avhengigheter av et bestemt objekt enkelt som vist i kodebiten som følger.

IUnityContainer container = ny UnityContainer ();

container.RegisterType ();

container.RegisterType ();

Når du registrerer typen objekt i Unity-beholderen, kan du spesifisere levetiden. Hvis du ikke spesifiserer noe, brukes standard levetid. En levetidsleder styrer levetiden til et registrert objekt. Typene av livsadministratorer som støttes av Unity Application Block inkluderer: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager og ExternallyControlledLifetimeManager.

Vurder følgende grensesnitt kalt ILogger.

offentlig grensesnitt ILogger

   {

streng GetLogTypeName ();

   }

ILogger-grensesnittet inneholder erklæringen om en metode som heter GetLogTypeName (). FileLoger, DatabaseLogger og EventLogger-klassene (gitt nedenfor) implementerer ILogger-grensesnittet.

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 avhengigheter ved hjelp av UnityContainer.

statisk tomrom Main (streng [] args)

{

IUnityContainer container = ny UnityContainer ();

container.RegisterType ();

ILogger iLogger = container.Resolve ();

streng logType = iLogger.GetLogTypeName ();

Console.WriteLine (logType);

Console.Read ();

}

Merk at "Container" i Unity Application Block er objektet som kan brukes til å opprette og injisere avhengigheter. Du kan registrere typer eller skrive kartlegginger med Unity-containeren ved hjelp av RegisterType-metoden. Metoden Resolve () brukes til å returnere en konkret forekomst av typen som er registrert for den generiske typen som er nevnt ved hjelp av T. I kodeeksemplet gitt ovenfor vil metoden Resolve () returnere en forekomst av FileLogger-klassen.

En alternativ tilnærming for å spesifisere Unity-integrasjonen er gjennom konfigurasjon. Forutsatt at du har spesifisert en container som heter Container i Unity-konfigurasjonen, illustrerer følgende kodebit hvordan du kan ringe LoadConfiguration-metoden på containerforekomsten i koden din.

streng containerName = "Container";

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

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