Ohjelmointi

DI: n käyttöönotto WebAPI: ssä NInjectin avulla

Riippuvuusinjektio on ohjelmistosuunnittelumalli, jonka avulla voit rakentaa sovellukseesi liitettäviä toteutuksia löyhästi kytkettyjen, testattavien komponenttien avulla. Se poistaa kovakoodatut riippuvuudet tyyppien välillä ja tekee tyyppeistäsi helpompia rakentaa, testata ja ylläpitää ajan myötä. IOC: n (Inversion of Control) suunnittelukuvion mukaan objektien ei tulisi luoda esineitä, joista ne riippuvat jonkin toiminnan suorittamiseksi.

Sinulla on monia IOC-säiliöitä, jotka auttavat sinua esineiden automaattisessa höyrystämisessä ja elinkaaren hallinnassa. Huomaa, että riippuvuusinjektio on IOC-periaatteen osajoukko. IOC-säiliöt käyttävät riippuvuusinjektiota kääntääkseen ohjausvirran.

Päästä alkuun

Aloita tämän toteutuksen luominen luomalla uusi WebAPI-projekti Visual Studiossa. Asenna seuraavaksi tarvittavat paketit NuGetistä toimiakseen NInjectin kanssa. Voit asentaa Ninject.Web.WebApi.WebHost-paketin NuGet Package Managerin kautta. Tämä puolestaan ​​asentaa seuraavat kaksi pakettia sinulle.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Riippuvuussyöttö NInjectilla

Kun Ninject.Web.WebApi.WebHost-paketti on asennettu onnistuneesti, NInject.WebCommon.cs-tiedosto luodaan automaattisesti projektin App_Start-kansioon. Luotu olisi paljon kattilakoodia - ohita vain se ja katso RegisterServices () -menetelmää. Ensi silmäyksellä, miten tämä menetelmä näyttää.

yksityinen staattinen tyhjä RegisterServices (IKernel-ydin)

{

}

Sinun on kirjoitettava koodi RegisterServices-menetelmään palvelujen rekisteröimiseksi tai riippuvuuksien lisäämiseksi. Palataan tähän myöhemmin tässä artikkelissa.

Tässä esimerkissä käytämme konstruktoriruiskutusta - riippuvuusinjektiotyyppiä, jossa yksi tai useampi riippuvuus injektoidaan konstruktoreiden kautta. Muita kahta riippuvuusinjektiotyyppiä ovat: asetinsyöttö ja liitäntäinjektio. Käsittelin tämän yksityiskohtaisesti yhdessä aikaisemmista viesteistäni.

Seuraavassa vaiheessa luo uusi ohjain nimeltä AuthorsController luomaasi WebAPI-projektiin. Korvaa AuthorsControllerin oletuskoodi alla olevalla.

public class AuthorsController: ApiController

    {

yksityinen vain lukukelpoinen IAuthorRepository-arkisto;

public AuthorsController (IAuthorRepository-arkisto)

        {

this.repository = arkisto;

        }

julkinen luettelo Hae ()

        {

palautustietovarasto.GetAllAuthors ();

        }

    }

AuthorsController sisältää vain luku -viitteen IAuthorRepository-rajapintaan, argumenttirakentajan ja Get action -menetelmän. Huomaa, että AuthorsController käyttää konstruktoria injektoimaan riippuvuuden, ts. Argumenttirakentaja hyväksyy parametrina viitteen IAuthorRepository-rajapintaan. IAuthorRepository-käyttöliittymän toteuttaa AuthorRepository-luokka. Näin IAuthorRepository-käyttöliittymä näyttää.

julkinen käyttöliittymä IAuthorRepository

    {

Luettele GetAllAuthors ();

    }

GetAllAuthors () -menetelmää käytetään palauttamaan luettelo kirjoittajista. Kirjoittajien nimet ovat kovakoodattuja. AuthorRepository-luokka toteuttaa GetAllAuthors-menetelmän alla esitetyllä tavalla.

public class AuthorRepository: IAuthorRepository

    {

julkinen luettelo GetAllAuthors ()

        {

Luettelon kirjoittajat = new List ();

kirjoittajat.Add ("Joydip");

kirjoittajat.Add ("Pete");

kirjoittajat.Add ("Steve");

paluu kirjoittajat;

        }

    }

Palvelujemme rekisteröiminen Ninject-palveluun

Tämä vaihe on melko yksinkertainen. Muistatko, että keskustelimme RegisterServices-menetelmästä aiemmin? Tämä kuuluu staattiseen luokkaan NinjectWebCommon NinjectWebCommon.cs-tiedostossa. Näin voit käyttää RegisterServices-menetelmää riippuvuuksien ratkaisemiseksi.

yksityinen staattinen tyhjä RegisterServices (IKernel-ydin)

{

ydin.Bind (). To ();

Ja se on kaikki mitä sinun tarvitsee tehdä. Jos näet NInjectiin liittyviä ajonaikaisia ​​virheitä, jotka saattavat johtua ActivationExceptionista. Korjaa ongelma asentamalla Ninject.Web.WebApi-paketin uusin versio. Päivitä vain Ninject.Web.WebApi uudelleen, käännä uudelleen ja suorita sitten sovelluksesi uudelleen.

Voit katsella tätä viestiä saadaksesi lisätietoja siitä, miten voimme käyttää NInjectia WebAPI: n kanssa.

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