Programmering

Hvordan implementere DI i WebAPI ved hjelp av NInject

Avhengighetsinjeksjon er et programvaremønster som hjelper deg med å bygge pluggbare implementeringer i applikasjonen din ved hjelp av løst koblede, testbare komponenter. Det eliminerer de hardkodede avhengighetene mellom typene og gjør typene dine lettere å bygge, teste og vedlikeholde over tid. IOC (Inversion of Control) designmønster sier at objekter ikke skal lage objekter som de er avhengige av for å utføre noe aktivitet.

Du har mange IOC-containere som hjelper deg med automatisk instantiering og livssyklusadministrasjon av objektene. Merk at avhengighetsinjeksjon er en delmengde av IOC-prinsippet. IOC-containere utnytter avhengighetsinjeksjon for å invertere strømmen av kontroll.

Starter

For å komme i gang med denne implementeringen, opprett et nytt WebAPI-prosjekt i Visual Studio. Deretter installerer du de nødvendige pakkene fra NuGet for å jobbe med NInject. Du kan installere Ninject.Web.WebApi.WebHost-pakken via NuGet Package Manager. Dette vil igjen installere følgende to pakker for deg.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Avhengighetsinjeksjon ved hjelp av NInject

Når Ninject.Web.WebApi.WebHost-pakken er installert, opprettes filen NInject.WebCommon.cs automatisk i App_Start-mappen i prosjektet. Det ville bli generert mye kokeplatekode - bare ignorere den og se metoden RegisterServices (). Ved første øyekast, her er hvordan denne metoden vil se ut.

private static void RegisterServices (IKernel kernel)

{

}

Du må skrive koden din i RegisterServices-metoden for å registrere tjenestene eller injisere avhengighetene. Vi kommer tilbake til dette senere i denne artikkelen.

I dette eksemplet vil vi bruke konstruktørinjeksjon - en type avhengighetsinjeksjon der en eller flere avhengigheter injiseres gjennom konstruktører. De to andre typene avhengighetsinjeksjon inkluderer: setterinjeksjon og grensesnittinjeksjon. Jeg dekket dette i detalj i et av mine tidligere innlegg.

Som et neste trinn, opprett en ny kontroller med navnet AuthorsController til WebAPI-prosjektet du har opprettet. Bytt ut standardkoden til AuthorsController med den som er oppgitt nedenfor.

offentlig klasse AuthorsController: ApiController

    {

privat readonly IAuthorRepository repository;

public AuthorsController (IAuthorRepository repository)

        {

this.repository = repository;

        }

offentlig liste Get ()

        {

return repository.GetAllAuthors ();

        }

    }

AuthorsController inneholder en readonly referanse til IAuthorRepository-grensesnittet, en argumentkonstruktør og en Get-handlingsmetode. Merk at AuthorsController bruker en konstruktør til å injisere avhengigheten, dvs. det er en argumentkonstruktør som godtar en referanse til IAuthorRepository-grensesnittet som en parameter. IAuthorRepository-grensesnittet er implementert av klassen AuthorRepository. Slik ser IAuthorRepository-grensesnittet ut.

offentlig grensesnitt IAuthorRepository

    {

Liste GetAllAuthors ();

    }

Metoden GetAllAuthors () brukes til å returnere en liste over forfattere. Forfatternavnene er hardkodede. Klassen AuthorRepository implementerer GetAllAuthors-metoden som vist nedenfor.

public class AuthorRepository: IAuthorRepository

    {

offentlig liste GetAllAuthors ()

        {

Listeforfattere = ny liste ();

author.Add ("Joydip");

author.Add ("Pete");

forfattere. Legg til ("Steve");

returnere forfattere;

        }

    }

Registrering av tjenestene våre hos Ninject

Dette trinnet er ganske enkelt. Husker vi at vi diskuterte RegisterServices-metoden tidligere? Dette tilhører den statiske klassen NinjectWebCommon i NinjectWebCommon.cs-filen. Slik kan du bruke RegisterServices-metoden til å løse avhengighetene.

private static void RegisterServices (IKernel kernel)

{

kernel.Bind (). To ();

Og det er alt du trenger å gjøre. Hvis du ser noen kjøretidsfeil som er relatert til NInject, kan det skyldes ActivationException. For å fikse det, bør du installere den nyeste versjonen av Ninject.Web.WebApi-pakken. Bare oppgrader Ninject.Web.WebApi igjen, kompiler på nytt og kjør deretter søknaden din på nytt.

Du kan se på dette innlegget for å få mer informasjon om hvordan vi kan bruke NInject med WebAPI.

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