Programmēšana

Kā ieviest DI WebAPI, izmantojot NInject

Atkarības iesmidzināšana ir programmatūras projektēšanas shēma, kas palīdz izveidot lietojumprogrammā iespraužamus ieviešanas veidus, izmantojot brīvi savienotus, pārbaudāmus komponentus. Tas novērš grūti kodētās atkarības starp tipiem un atvieglo jūsu tipu izveidi, testēšanu un uzturēšanu laika gaitā. SOK (Inversion of Control) dizaina modelis norāda, ka objektiem nevajadzētu radīt objektus, no kuriem tie ir atkarīgi, lai veiktu kādu darbību.

Jums ir daudz SOK konteineru, kas jums palīdz objektu automātiskajā atrašanā un dzīves cikla pārvaldībā. Ņemiet vērā, ka atkarības injekcija ir SOK principa apakškopa. SOK konteineri izmanto atkarības iesmidzināšanu, lai apgrieztu vadības plūsmu.

Darba sākšana

Lai sāktu darbu ar šo ieviešanu, Visual Studio izveidojiet jaunu WebAPI projektu. Pēc tam instalējiet nepieciešamās paketes no NuGet darbam ar NInject. Ninject.Web.WebApi.WebHost pakotni var instalēt, izmantojot NuGet pakešu pārvaldnieku. Tas savukārt instalēs jums divus šādus pakotnes.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Atkarības injekcija, izmantojot NInject

Kad pakete Ninject.Web.WebApi.WebHost ir veiksmīgi instalēta, NInject.WebCommon.cs fails tiek automātiski izveidots projekta mapē App_Start. Būtu ģenerēts daudz katlu kodu - vienkārši ignorējiet to un atsaucieties uz RegisterServices () metodi. No pirmā acu uzmetiena lūk, kā šī metode izskatīsies.

private static void RegisterServices (IKernel kodols)

{

}

Lai reģistrētu pakalpojumus vai injicētu atkarības, jums būs jāieraksta kods RegisterServices metodē. Pie tā mēs atgriezīsimies vēlāk šajā rakstā.

Šajā piemērā mēs izmantosim konstruktora iesmidzināšanu - atkarības injekcijas veidu, kurā viena vai vairākas atkarības tiek ievadītas caur konstruktoriem. Pārējie divi atkarības injekcijas veidi ietver: setera injekciju un saskarnes injekciju. Es to detalizēti aplūkoju vienā no saviem iepriekšējiem ierakstiem.

Nākamajā solī izveidojiet jaunu kontrolieri ar nosaukumu AuthorsController izveidotajam WebAPI projektam. Nomainiet AuthorsController noklusējuma kodu ar zemāk norādīto.

publiskā klase AuthorsController: ApiController

    {

privāts tikai lasāms IAuthorRepository repozitorijs;

publiskais AuthorsController (IAuthorRepository repozitorijs)

        {

this.repository = krātuve;

        }

public List Get ()

        {

atgriešanās krātuve.GetAllAuthors ();

        }

    }

AuthorsController satur tikai atsauci uz IAuthorRepository saskarni, argumentu konstruktoru un Get action metodi. Ņemiet vērā, ka AuthorsController izmanto konstruktoru, lai ievadītu atkarību, t.i., tas ir argumentu konstruktors, kas kā parametru pieņem atsauci uz IAuthorRepository saskarni. IAuthorRepository saskarni ievieš klase AuthorRepository. Lūk, kā izskatās IAuthorRepository saskarne.

publiskā saskarne IAuthorRepository

    {

Sarakstā GetAllAuthors ();

    }

Lai atgrieztu autoru sarakstu, tiek izmantota metode GetAllAuthors (). Autoru vārdi ir grūti kodēti. Klase AuthorRepository ievieš metodi GetAllAuthors, kā parādīts zemāk.

public class AuthorRepository: IAuthorRepository

    {

publiskais saraksts GetAllAuthors ()

        {

Saraksta autori = new Saraksts ();

autori.Pievienot ("Joydip");

autori.Pievienot ("Pete");

autori.Pievienot ("Stīvs");

atgriešanās autori;

        }

    }

Mūsu pakalpojumu reģistrēšana Ninject

Šis solis ir pavisam vienkāršs. Vai atceraties, ka mēs jau iepriekš apspriedām RegisterServices metodi? Tas pieder NinjectWebCommon.cs failā esošajai statiskajai klasei NinjectWebCommon. Lūk, kā jūs varat izmantot metodi RegisterServices, lai atrisinātu atkarības.

private static void RegisterServices (IKernel kodols)

{

kodols.Bind (). To ();

Un tas ir viss, kas jums jādara. Ja redzat izpildlaika kļūdas, kas saistītas ar NInject, iespējams, tas ir saistīts ar ActivationException. Lai to labotu, jāinstalē jaunākā pakotnes Ninject.Web.WebApi versija. Vienkārši vēlreiz jauniniet Ninject.Web.WebApi, atkārtoti apkopojiet un pēc tam vēlreiz izpildiet savu lietojumprogrammu.

Jūs varat apskatīt šo ziņu, lai iegūtu papildinformāciju par to, kā mēs varam izmantot NInject ar WebAPI.

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