Programiranje

Kako implementirati DI v WebAPI z uporabo NInject

Vbrizganje odvisnosti je vzorec zasnove programske opreme, ki vam pomaga zgraditi vtične izvedbe v vaši aplikaciji z uporabo slabo povezanih komponent, ki jih je mogoče preizkusiti. Odpravlja trdno kodirane odvisnosti med vrstami in sčasoma vaše tipe lažje gradi, preizkuša in vzdržuje. Vzorec načrtovanja IOC (Inverzija nadzora) navaja, da predmeti ne bi smeli ustvarjati predmetov, od katerih so odvisni, da bi izvedli neko dejavnost.

Na voljo imate veliko vsebnikov IOC, ki vam pomagajo pri samodejnem ustvarjanju primerov in upravljanju življenjskega cikla predmetov. Upoštevajte, da je vbrizgavanje odvisnosti podskupina načela IOC. IOC vsebniki izkoriščajo vbrizganje odvisnosti, da obrnejo tok nadzora.

Kako začeti

Če želite začeti s to izvedbo, v Visual Studio ustvarite nov projekt WebAPI. Nato iz programa NuGet namestite potrebne pakete za delo z NInjectom. Paket Ninject.Web.WebApi.WebHost lahko namestite prek upravitelja paketov NuGet. S tem bi namesto vas namestili naslednja dva paketa.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Injekcija odvisnosti z uporabo NInject

Ko je paket Ninject.Web.WebApi.WebHost uspešno nameščen, se datoteka NInject.WebCommon.cs samodejno ustvari v mapi App_Start v vašem projektu. Ustvarilo bi se veliko vzorčne kode - preprosto jo prezrite in se obrnite na metodo RegisterServices (). Na prvi pogled je videti, kako bi ta metoda izgledala.

zasebna statična praznina RegisterServices (jedro IKernel)

{

}

Za registracijo storitev ali vbrizganje odvisnosti bi morali vnesti kodo v metodo RegisterServices. Na to se bomo vrnili kasneje v tem članku.

V tem primeru bomo uporabili vbrizgavanje konstruktorja - vrsto vbrizgavanja odvisnosti, pri katerem se ena ali več odvisnosti vbrizga skozi konstruktorje. Drugi dve vrsti vbrizgavanja odvisnosti sta: vbrizgavanje nastavitve in vbrizgavanje vmesnika. To sem podrobno obravnaval v enem od svojih prejšnjih prispevkov.

Kot naslednji korak v projektu WebAPI, ki ste ga ustvarili, ustvarite nov krmilnik z imenom AuthorsController. Zamenjajte privzeto kodo AuthorsController s spodnjo.

javni razred AuthorsController: ApiController

    {

zasebno repozitorij IAuthorRepository samo za branje;

javni AuthorsController (repozitorij IAuthorRepository)

        {

this.repository = repozitorij;

        }

javni seznam Get ()

        {

vrni repozitorij.GetAllAuthors ();

        }

    }

AuthorsController vsebuje sklic samo za branje na vmesnik IAuthorRepository, konstruktor argumentov in metodo pridobivanja dejanj. Upoštevajte, da AuthorsController za vbrizganje odvisnosti uporablja konstruktor, to je konstruktor argumentov, ki kot parameter sprejme sklic na vmesnik IAuthorRepository. Vmesnik IAuthorRepository izvaja razred AuthorRepository. Evo, kako izgleda vmesnik IAuthorRepository.

javni vmesnik IAuthorRepository

    {

Seznam GetAllAuthors ();

    }

Metoda GetAllAuthors () se uporablja za vrnitev seznama avtorjev. Imena avtorjev so težko kodirana. Razred AuthorRepository izvaja metodo GetAllAuthors, kot je prikazano spodaj.

javni razred AuthorRepository: IAuthorRepository

    {

javni seznam GetAllAuthors ()

        {

Avtorji seznama = nov seznam ();

avtorji.Add ("Joydip");

avtorji.Add ("Pete");

avtorji.Add ("Steve");

vrnitev avtorjev;

        }

    }

Registracija naših storitev pri Ninjectu

Ta korak je zelo preprost. Se spomnite, da smo že prej razpravljali o metodi RegisterServices? To spada v statični razred NinjectWebCommon v datoteki NinjectWebCommon.cs. Tukaj je opisano, kako lahko z metodo RegisterServices razrešite odvisnosti.

zasebna statična praznina RegisterServices (jedro IKernel)

{

kernel.Bind (). To ();

In to je vse, kar morate storiti. Če opazite napake med izvajanjem, povezane z NInjectom, je to morda posledica ActivationException. Če ga želite popraviti, namestite najnovejšo različico paketa Ninject.Web.WebApi. Preprosto znova nadgradite Ninject.Web.WebApi, znova sestavite in znova zaženite aplikacijo.

V tej objavi si lahko ogledate dodatne informacije o tem, kako lahko uporabljamo NInject z WebAPI.

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