Samoin kuin Castle Windsor ja StructureMap, Unity Application Block on myös IoC (Inversion of Control) -säiliö. Microsoftin Unity-sovelluslohko on kevyt, laajennettavissa oleva riippuvuusinjektiosäiliö. Se tarjoaa tukea rakentajan ruiskutukseen, omaisuuden injektointiin ja myös menetelmäpuhelun injektointiin. Muuten, Unity-sovelluslohko otettiin käyttöön osana yrityskirjastoa.
Jos et ole perehtynyt riippuvuuden injektointiin ja ohjauksen kääntämiseen, tässä on lyhyt selitys. Riippuvuusinjektio on IoC-periaatteen toteutus. Sekä ohjauksen inversio että riippuvuusinjektio ovat tapoja, joiden avulla voit katkaista sovelluksen komponenttien väliset riippuvuudet. Dependency Injection -periaate toteaa, että sovelluksen korkean tason moduulien ei pitäisi riippua matalan tason moduuleista; pikemminkin molempien pitäisi riippua abstraktioista.
Unity Application Block -suunnittelutavoitteet
Unity-sovelluslohko on Dependency Injection (DI) -säiliö. Huomaa, että Unity-sovelluslohko ei ole riippuvainen Enterprise Library -määritysjärjestelmästä. Siksi voit käyttää sitä erillisenä riippuvuuden injektiosäiliönä, joka estää järjestelmään asennettavan yrityskirjaston. Unity-sovelluslohkon suunnittelutavoitteet sisältävät seuraavat:
- Modulaarisen rakenteen edistäminen irrotuksen avulla
- Tarjoaa nopean, laajennettavan, kevyen riippuvaisen injektiosäiliön
- Tarjoa tukea laajennettavuudelle laajennusten avulla
- Tarjoa tukea ominaisuusohjatulle injektiolle
- Tarjoa tukea intuitiiviselle sovellusliittymälle yhteyden muodostamiseksi riippuvuussyöttösäiliöön ja sen kanssa työskentelemiseen
Päästä alkuun
Tässä osiossa tutkitaan, miten voimme aloittaa Unity-sovelluslohkon käytön sovelluksissamme. Ensimmäisen vaiheen tulisi olla Unity Application Blockin asentaminen järjestelmään. Helpoin tapa asentaa tämä kirjasto on NuGetin kautta. Tässä kuvassa käytämme tässä konsolisovellushanketta. Voit rakentaa ensimmäisen sovelluksen Unity-sovelluslohkon avulla seuraavasti:
- Avaa Visual Studio IDE
- Luo konsoliprojekti ja tallenna se nimellä
- Napsauta hiiren kakkospainikkeella projektia Solution Explorer -ikkunassa
- Valitse "Hallitse NuGet-paketteja ..."
- Asenna Unity NuGet Package Manager
Se on kaikki mitä sinun tarvitsee tehdä asettaaksesi vaiheen Unityn käytön aloittamiseksi. Olet nyt valmis käyttämään Unity Application Blockia projektissasi.
Objektiriippuvuuksien luominen ja ratkaiseminen Unity-säilön avulla
Voit ratkaista tietyn objektin riippuvuudet Unity-säilön avulla helposti seuraavan koodinpätkän mukaisesti.
IUnityContainer-säilö = uusi UnityContainer ();
container.RegisterType ();
container.RegisterType ();
Kun rekisteröit objektityypin Unity-säilöön, voit määrittää käyttöiän. Jos et määritä mitään, käytetään oletusikää. Elinkaaren hallinta hallitsee rekisteröidyn objektin käyttöikää. Unity-sovelluslohkon tukemia elinikäisten hallintaohjelmien tyyppejä ovat: TransientLifetimeManager, ContainerControlledLifetimeManager, HierarchicalLifetimeManager, PerThreadLifetimeManager ja ExternallyControlledLifetimeManager.
Harkitse seuraavaa käyttöliittymää nimeltä ILogger.
julkinen käyttöliittymä ILogger
{
merkkijono GetLogTypeName ();
}
ILogger-käyttöliittymä sisältää yhden metodin, GetLogTypeName (), ilmoituksen. Luokat FileLoger, DatabaseLogger ja EventLogger (annettu alla) toteuttavat ILogger-käyttöliittymän.
julkinen luokka FileLogger: ILogger
{
julkinen merkkijono GetLogTypeName ()
{
palauta "File Logger";
}
}
julkisen luokan DatabaseLogger: ILogger
{
julkinen merkkijono GetLogTypeName ()
{
palauta "Database Logger";
}
}
julkinen luokka EventLogger: ILogger
{
julkinen merkkijono GetLogTypeName ()
{
return "Tapahtumaloki";
}
}
Seuraava koodiluettelo näyttää, miten voit ratkaista riippuvuudet UnityContainerin avulla.
staattinen void Main (merkkijono [] args)
{
IUnityContainer-säilö = uusi UnityContainer ();
container.RegisterType ();
ILogger iLogger = säilö.Resolve ();
merkkijono logType = iLogger.GetLogTypeName ();
Console.WriteLine (logType);
Konsoli.Lue ();
}
Huomaa, että "Container" Unity-sovelluslohkossa on objekti, jota voidaan käyttää riippuvuuksien luomiseen ja lisäämiseen. Voit rekisteröidä tyypit tai tyyppikartoitukset Unity-säilöön käyttämällä RegisterType-menetelmää. Resolve () -menetelmää käytetään palauttamaan konkreettinen ilmentymä, joka on rekisteröity T: llä mainittuun yleiseen tyyppiin. Yllä olevassa koodiesimerkissä Resolve () -menetelmä palauttaa FileLogger-luokan ilmentymän.
Vaihtoehtoinen tapa määritellä Unity-integraatio on konfigurointi. Olettaen, että olet määrittänyt kontin nimeltä Container Unity-määrityksissäsi, seuraava koodinpätkä kuvaa, kuinka voit kutsua LoadConfiguration-menetelmää koodisi säilön ilmentymässä.
merkkijono containerName = "Säilö";
IUnityContainer-säilö = uusi UnityContainer (). LoadConfiguration (containerName);