Programmering

Sådan implementeres DI i WebAPI ved hjælp af NInject

Afhængighedsindsprøjtning er et softwaredesignmønster, der hjælper dig med at oprette plugbare implementeringer i din applikation ved hjælp af løst koblede, testbare komponenter. Det eliminerer de hårdkodede afhængigheder mellem typerne og gør dine typer lettere at opbygge, teste og vedligeholde over tid. IOC (Inversion of Control) designmønsteret siger, at objekter ikke skal oprette objekter, som de er afhængige af, for at udføre en eller anden aktivitet.

Du har mange IOC-containere, der hjælper dig med automatisk instantiering og styring af livscyklus af objekterne. Bemærk, at afhængighedsinjektion er en delmængde af IOC-princippet. IOC-containere udnytter afhængighedsindsprøjtning for at vende strømmen af ​​kontrol.

Kom godt i gang

For at komme i gang med denne implementering skal du oprette et nyt WebAPI-projekt i Visual Studio. Installer derefter de nødvendige pakker fra NuGet for at arbejde med NInject. Du kan installere Ninject.Web.WebApi.WebHost-pakken via NuGet Package Manager. Dette vil igen installere følgende to pakker til dig.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Afhængighedsinjektion ved hjælp af NInject

Når først Ninject.Web.WebApi.WebHost-pakken er installeret, oprettes filen NInject.WebCommon.cs automatisk inde i mappen App_Start i dit projekt. Der ville blive genereret en masse kedelpladekode - bare ignorér den og henvis til metoden RegisterServices (). Ved første øjekast er her, hvordan denne metode vil se ud.

privat statisk ugyldigt RegisterServices (IKernel kernel)

{

}

Du bliver nødt til at skrive din kode i metoden RegisterServices for at registrere tjenesterne eller injicere afhængighederne. Vi kommer tilbage til dette senere i denne artikel.

I dette eksempel vil vi bruge konstruktørinjektion - en type afhængighedsinjektion, hvor en eller flere afhængigheder injiceres gennem konstruktører. De to andre typer afhængighedsinjektion inkluderer: setterinjektion og interfaceinjektion. Jeg dækkede dette detaljeret i et af mine tidligere indlæg.

Som et næste trin skal du oprette en ny controller ved navn AuthorsController til det WebAPI-projekt, du har oprettet. Udskift standardkoden til AuthorsController med nedenstående kode.

offentlig klasse AuthorsController: ApiController

    {

privat readonly IAuthorRepository repository;

offentlige AuthorsController (IAuthorRepository repository)

        {

this.repository = repository;

        }

offentlig liste Get ()

        {

returner repository.GetAllAuthors ();

        }

    }

AuthorsController indeholder en readonly-reference til IAuthorRepository-grænsefladen, en argumentkonstruktør og en Get-handlingsmetode. Bemærk, at AuthorsController bruger en konstruktør til at injicere afhængigheden, dvs. det er en argumentkonstruktør, der accepterer en henvisning til IAuthorRepository-grænsefladen som en parameter. IAuthorRepository-grænsefladen implementeres af klassen AuthorRepository. Sådan ser IAuthorRepository-grænsefladen ud.

offentlig grænseflade IAuthorRepository

    {

Liste GetAllAuthors ();

    }

Metoden GetAllAuthors () bruges til at returnere en liste over forfattere. Forfatternavne er hårdkodede. Klassen AuthorRepository implementerer GetAllAuthors-metoden som vist nedenfor.

public class AuthorRepository: IAuthorRepository

    {

offentlig liste GetAllAuthors ()

        {

Listeforfattere = ny liste ();

forfattere.Tilføj ("Joydip");

forfattere.Add ("Pete");

forfattere.Tilføj ("Steve");

returnere forfattere;

        }

    }

Registrering af vores tjenester hos Ninject

Dette trin er ret simpelt. Kan du huske, at vi tidligere har diskuteret metoden RegisterServices? Dette hører til den statiske klasse NinjectWebCommon i NinjectWebCommon.cs-filen. Her er hvordan du kan bruge metoden RegisterServices til at løse afhængighederne.

privat statisk ugyldigt RegisterServices (IKernel kernel)

{

kernel.Bind (). To ();

Og det er alt hvad du skal gøre. Hvis du ser nogen kørselsfejl, der er relateret til NInject, kan det skyldes ActivationException. For at rette det skal du installere den nyeste version af pakken Ninject.Web.WebApi. Opgrader bare Ninject.Web.WebApi igen, kompiler igen og udfør derefter din applikation igen.

Du kan se på dette indlæg for at få yderligere oplysninger om, hvordan vi kan bruge NInject med WebAPI.

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