Programavimas

Kaip diegti DI WebAPI naudojant NInject

Priklausomybės įpurškimas yra programinės įrangos projektavimo šablonas, padedantis sukurti pritaikomus programos diegimus naudojant laisvai sujungtus, patikrinamus komponentus. Tai pašalina sunkiai koduojamas priklausomybes tarp tipų ir palengvina tipų kūrimą, testavimą ir palaikymą laikui bėgant. IOC (Inversion of Control) projektavimo šablone teigiama, kad objektai neturėtų kurti objektų, nuo kurių jie priklauso, kad galėtų atlikti tam tikrą veiklą.

Turite daug IOC talpyklų, kurios padeda automatizuoti objektų valdymą ir gyvavimo ciklą. Atkreipkite dėmesį, kad priklausomybės injekcija yra IOC principo pogrupis. TOK konteineriai valdo priklausomybės įpurškimą, kad apsuktų valdymo srautą.

Darbo pradžia

Norėdami pradėti diegti, sukurkite naują „WebAPI“ projektą „Visual Studio“. Tada įdiekite reikalingus „NuGet“ paketus, kad galėtumėte dirbti su „NInject“. Ninject.Web.WebApi.WebHost paketą galite įdiegti per „NuGet Package Manager“. Tai savo ruožtu jums įdiegs šiuos du paketus.

„Ninject.Web.WebApi“

„Ninject.Web.WebApi.WebHost“

Priklausomybės injekcija naudojant „NInject“

Kai „Ninject.Web.WebApi.WebHost“ paketas bus sėkmingai įdiegtas, failas „NInject.WebCommon.cs“ bus automatiškai sukurtas projekto aplanke „App_Start“. Sugeneruotų daug katilinės kodo - tiesiog jo nepaisykite ir remkitės „RegisterServices“ () metodu. Iš pirmo žvilgsnio štai kaip atrodys šis metodas.

privatus statinis negaliojantis „RegisterServices“ („IKernel“ branduolys)

{

}

Norint užregistruoti paslaugas arba įšvirkšti priklausomybes, jums reikės parašyti kodą „RegisterServices“ metodu. Prie to grįšime vėliau šiame straipsnyje.

Šiame pavyzdyje mes naudosime konstruktoriaus įpurškimą - priklausomybės įpurškimo tipą, kai viena ar daugiau priklausomybių įšvirkščiama per konstruktorius. Kiti du priklausomybės injekcijos tipai apima: seterio injekciją ir sąsajos injekciją. Tai išsamiai aprašiau viename iš savo ankstesnių įrašų.

Kitame žingsnyje sukurkite naują valdiklį, pavadintą AuthorsController į jūsų sukurtą WebAPI projektą. Pakeiskite numatytąjį „AuthorsController“ kodą į žemiau pateiktą.

public class AuthorsController: ApiController

    {

privati, tik skaitoma „IAuthorRepository“ saugykla;

viešoji „AuthorsController“ („IAuthorRepository“ saugykla)

        {

this.repository = saugykla;

        }

public List Get ()

        {

grąžinimo saugykla.GetAllAuthors ();

        }

    }

„AuthorsController“ yra tik skaitymo nuoroda į „IAuthorRepository“ sąsają, argumentų konstruktorius ir „Get action“ metodas. Atkreipkite dėmesį, kad „AuthorsController“ naudoja konstruktorių, norėdamas įvesti priklausomybę, t. Y. Tai yra argumentų konstruktorius, kuris priima nuorodą į „IAuthorRepository“ sąsają kaip parametrą. „IAuthorRepository“ sąsają įgyvendina „AuthorRepository“ klasė. Štai kaip atrodo „IAuthorRepository“ sąsaja.

viešoji sąsaja „IAuthorRepository“

    {

„GetAllAuthors“ () sąrašas;

    }

Autorių sąrašui grąžinti naudojamas metodas GetAllAuthors (). Autorių vardai yra užkoduoti. „AuthorRepository“ klasė įgyvendina „GetAllAuthors“ metodą, kaip parodyta žemiau.

public class Autorių saugykla: „IAuthorRepository“

    {

viešas „GetAllAuthors“ sąrašas ()

        {

Sąrašo autoriai = new Sąrašas ();

autoriai.Add ("Joydip");

autoriai.Add ("Pete");

autoriai.Add ("Steve");

grįžtantys autoriai;

        }

    }

Mūsų paslaugų registravimas „Ninject“

Šis žingsnis yra gana paprastas. Pamenate, kad mes anksčiau aptarėme „RegisterServices“ metodą? Tai priklauso statinei „NinjectWebCommon“ klasei faile „NinjectWebCommon.cs“. Štai kaip galite naudoti „RegisterServices“ metodą, kad išspręstumėte priklausomybes.

privatus statinis negaliojantis „RegisterServices“ („IKernel“ branduolys)

{

branduolys.Bind (). To ();

Ir tai viskas, ką jums reikia padaryti. Jei matote vykdymo laiko klaidų, susijusių su „NInject“, tai gali būti dėl „ActivationException“. Norėdami ją išspręsti, turėtumėte įdiegti naujausią „Ninject.Web.WebApi“ paketo versiją. Tiesiog dar kartą atnaujinkite „Ninject.Web.WebApi“, sukompiliuokite ir vėl vykdykite savo programą.

Galite peržiūrėti šį įrašą, jei norite gauti papildomos informacijos apie tai, kaip mes galime naudoti „NInject“ su „WebAPI“.

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