Programmering

Hvordan bruke avhengighetsinjeksjon i ASP.Net Core

Støtte for avhengighetsinjeksjon er innebygd i ASP.Net Core, Microsofts åpen kildekode, kryssplattform, magert og modulært rammeverk for å bygge skalerbare webapplikasjoner med høy ytelse. I ASP.Net Core kan både rammetjenester og applikasjonstjenester injiseres i klassene dine, i stedet for å være tett koblet. I denne artikkelen vil vi se på hvordan vi kan jobbe med avhengighetsinjeksjon i ASP.Net Core.

Avhengighetsinjeksjon (også kjent som DI) er et designmønster der en klasse eller et objekt får sine avhengige klasser injisert (overført til det av en annen klasse eller et objekt) i stedet for å lage dem direkte. Avhengighetsinjeksjon muliggjør løs kobling og fremmer testbarhet og vedlikehold. Videre lar avhengighetsinjeksjon deg endre implementeringene dine uten å måtte endre klassene eller grensesnittene som utnytter disse implementeringene.

Gjøre en tjeneste tilgjengelig via avhengighetsinjeksjon i ASP.Net

Vi vil nå bygge en enkel tjeneste i Visual Studio ved hjelp av ASP.Net Core og illustrere hvordan vi kan legge den til avhengighetsinjeksjonsbeholderen, registrere den med rørledningen og deretter konsumere den i applikasjonen vår. Følg disse trinnene for å opprette et nytt ASP.Net Core-prosjekt i Visual Studio 2017 eller Visual Studio 2015. Hvis du bruker Visual Studio 2015, må du sørge for at .Net Core er installert.

  1. Åpne Visual Studio
  2. Klikk på Fil -> Ny -> Prosjekt
  3. I dialogvinduet Nytt prosjekt velger du prosjektmalen “ASP.NET Core Web Application”
  4. Angi navn og sted for prosjektet ditt, og klikk OK for å lagre

Lag nå følgende POCO-klasse (vanlig CLI-objekt). Denne klassen inneholder bare en egenskap - den representerer alle emneområdene som dekkes av forfatterne til et bestemt forlag.

offentlig klasse TopicArea

    {

offentlig streng Navn {get; sett; }

    }

Tenk på følgende grensesnitt som heter ITopicAreaService som representerer kontrakten for TopicAreaService.

offentlig grensesnitt ITopicAreaService

    {

IEnumerable GetAllTopicAreas ();

    }

De ITopicAreaService grensesnittet inneholder erklæringen om en metode som heter GetAllTopicAreas (). De TopicAreaService klasse implementerer ITopicAreaService som vist under.

offentlig klasse TopicAreaService: ITopicAreaService

    {

offentlig IEnumerable GetAllTopicAreas ()

        {

returner ny liste

        {

nye TopicArea {Name},

nye TopicArea {Name},

nye TopicArea {Name}

        };

        }

    }

Registrering av tjenester for avhengighetsinjeksjon i ASP.Net

Neste trinn er å registrere TopicAreaService med avhengighetsinjeksjonsbeholderen tilgjengelig som en del av ASP.Net-koden. For å gjøre dette, skriv følgende kode i ConfigureServices metoden i Startup.cs-filen. De ConfigureServices metoden legger til tjenester i tjenestebeholderen, som gjør dem tilgjengelige i appen din via avhengighetsinjeksjon. Det kalles automatisk av kjøretiden.

offentlig ugyldighet ConfigureServices (IServiceCollection-tjenester)

        {

services.AddTransient ();

// Legg til rammetjenester.

services.AddMvc ();

        }

Hvis du har flere tjenester som må registreres, kan du bruke en utvidelsesmetode som vist nedenfor.

offentlig statisk klasse ServiceExtensions

    {

offentlig statisk IServiceCollection RegisterServices (

denne IServiceCollection-tjenestene)

        {

services.AddTransient ();

// Legg til alle andre tjenester her.

retur tjenester;

        }

    }

Bruker RegisterServices metoden lar deg beholde din ConfigureServices metode mager og vedlikeholdbar. I stedet for å spesifisere hver tjeneste i ConfigureServices, alt du trenger å gjøre er å ringe RegisterServices utvidelsesmetoden en gang i ConfigureServices metode som vist i kodebiten nedenfor.

offentlig ugyldighet ConfigureServices (IServiceCollection-tjenester)

        {

services.RegisterServices ();

// Legg til rammetjenester.

services.AddMvc ();

        }

Levetid for avhengighetsinjeksjon i ASP.Net

Avhengighetsinjeksjons levetid brukes til å spesifisere når de avhengige objektene blir opprettet og gjenopprettet. Når det gjelder levetider for avhengighetsinjeksjonsforekomster i ASP.Net Core-applikasjoner, er det tre muligheter:

  1. Singleton: Dette innebærer at bare en enkelt forekomst vil bli opprettet og delt av alle forbrukere.
  2. Omfang: Dette innebærer at en forekomst per omfang (dvs. en forekomst per forespørsel til applikasjonen) blir opprettet.
  3. Transient: Dette innebærer at komponentene ikke deles, men vil opprettes hver gang de blir bedt om det.

Merk at i dette eksemplet har vi brukt Flyktig type. Følgende kodebit illustrerer hvordan du kan bruke andre typer levetid når du registrerer tjenesten din.

tjenester.AddScoped ();

tjenester.AddSingleton ();

Bruke en tjeneste via avhengighetsinjeksjon i ASP.Net

Nå som tjenesten vi implementerte er lagt til rørledningen, kan du bruke den i hvilken som helst av kontrollerne i ASP.Net Core-prosjektet. Følgende kodebit illustrerer hvordan du kan be om en forekomst av TopicAreaService i kontrolleren din.

privat readonly ITopicAreaService _topicAreaService;

offentlig DefaultController (ITopicAreaService topicAreaService)

    {

_topicAreaService = topicAreaService;

    }

Slik gjør du GetAllTopicAreas metoden for TopicAreaService kalles fra handlingsmetoden til kontrolleren din.

[HttpGet]

offentlig IEnumerable GetAllTopicAreas ()

        {

returnere _topicAreaService.GetAllTopicAreas ();

        }

Nedenfor er den komplette kodelisten for kontrollerklassen for din referanse.
ved hjelp av Microsoft.AspNetCore.Mvc;

ved hjelp av System.Collections.Generic;

navnerom ASPNETCoreDI.Controllers

{

[Produserer (“applikasjon / json”)]

[Rute (“api / standard”)]

offentlig klasse DefaultController: Controller

    {

privat readonly ITopicAreaService _topicAreaService;

offentlig DefaultController (ITopicAreaService topicAreaService)

        {

_topicAreaService = topicAreaService;

        }

[HttpGet]

offentlig IEnumerable GetAllTopicAreas ()

        {

returnere _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Du kan utnytte den innebygde støtten for avhengighetsinjeksjon i ASP.Net Core for å bygge applikasjoner som er modulære, magre og rene, enkle å vedlikeholde og teste. Den innebygde leverandøren av avhengighetsinjeksjon i ASP.Net Core er ikke like funksjonsrik som containere som StructureMap og Ninject, men den er ganske rask og, som vi har sett, enkel å konfigurere og bruke.

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