Programmering

Hvordan bruke Autofac i ASP.Net Core

Avhengighetsinjeksjon muliggjør løs kobling og fremmer testbarhet og vedlikehold. ASP.Net Core gir innebygd støtte for avhengighetsinjeksjon (en slags inversjon av kontroll) med en minimalistisk avhengighetsinjeksjonsbeholder. Imidlertid mangler den innebygde containeren mange av funksjonene til en fullverdig avhengighetsinjeksjon eller inversjon av kontrollcontaineren.

For å overvinne dette kan du bruke tredjeparts containere i ASP.Net Core. Med andre ord kan du enkelt erstatte den innebygde containeren med en tredjeparts container. Autofac er en inversjon av kontrollbeholder som kan brukes til å løse avhengigheter. Denne artikkelen gir en diskusjon om hvordan vi kan jobbe med Autofac i ASP.Net Core.

Opprett et ASP.Net Core-prosjekt i Visual Studio

La oss først lage et ASP.Net Core-prosjekt i Visual Studio. Forutsatt at Visual Studio 2017 eller Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt ASP.Net Core-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "ASP.Net Core Web Application" fra listen over malene som vises.
  4. Klikk på Neste.
  5. I vinduet "Konfigurer ditt nye prosjekt" angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.
  7. I vinduet "Create New ASP.Net Core Web Application" velger du .Net Core som kjøretid og ASP.Net Core 2.2 (eller nyere) fra rullegardinlisten øverst.
  8. Velg “Web Application” som prosjektmal.
  9. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av da vi ikke bruker disse funksjonene her.
  10. Forsikre deg om at autentisering er angitt som “ingen godkjenning”, da vi heller ikke bruker autentisering.
  11. Klikk på Opprett.

Dette vil skape et nytt ASP.Net Core-prosjekt i Visual Studio. Vi bruker dette prosjektet i de påfølgende delene av denne artikkelen til å jobbe med Autofac.

Installer Autofac i ASP.Net Core-prosjektet

Det er enkelt å installere Autofac - du kan installere det fra NuGet. I skrivende stund er den nåværende versjonen av Autofac 4.9.2. For å jobbe med Autofac, bør du også installere Autofac.Extensions.DependencyInjection-pakken. Dette vil sikre at du har de nødvendige avhengighetene installert for å jobbe med Autofac.

Velg ASP.Net Core Web Application-prosjektet du opprettet ovenfor, høyreklikk og installer Autofac.Extensions.DependencyInjection via NuGet Package Manager. Godta lisensavtaler du kan bli bedt om under installasjonen. Alternativt kan du installere denne pakken ved å skrive inn følgende kommando i NuGet Package Manager-konsollen:

Install-Package Autofac.Extensions.DependencyInjection

Opprett en klasse i ASP.Net Core-applikasjonen

For å illustrere avhengighetsinjeksjon trenger vi noen gjenstander å jobbe med. Vurder IAuthorRepository-grensesnittet som inneholder erklæringen om GetMessage-metoden nedenfor.

 offentlig grensesnitt IAuthorRepository

    {

streng GetMessage ();

    }

Klassen AuthorRepository implementerer IAuthorRepository-grensesnittet som vist nedenfor.

 public class AuthorRepository: IAuthorRepository

    {

offentlig streng GetMessage ()

        {

returner "Hello World";

        }

    }

Merk at dette er en minimalistisk implementering av et depot - dvs. det inneholder ikke CRUD-metodene som et typisk repository inneholder. Jeg overlater til deg å implementere CRUD-metodene på riktig måte.

Konfigurer Autofac i ASP.Net Core

For å konfigurere Autofac, bør du spesifisere konfigurasjonskoden i ConfigureServices-metoden i oppstartsklassen. Vær oppmerksom på at ConfigureServices-metoden brukes til å legge til tjenester i løpetid i containeren.

Det første trinnet er å opprette en containerbygger for å registrere de nødvendige tjenestene med Autofac-containeren. Det første trinnet er å fylle ut rammetjenestene ved hjelp av Populate-metoden som vist nedenfor.

var containerBuilder = ny ContainerBuilder ();

containerBuilder.Populate (tjenester);

Neste trinn er å registrere de tilpassede tjenestene hos Autofac. For å gjøre dette, bruk RegisterType-metoden på containerbyggerforekomsten som vist nedenfor.

containerBuilder.RegisterType (). Som ();

For å bygge containeren, skriv følgende kode.

var container = containerBuilder.Build ();

returbeholder.Resolve ();

Her er den komplette kildekoden til ConfigureServices-metoden for din referanse:

offentlige IServiceProvider ConfigureServices (IServiceCollection-tjenester)

   {

services.AddMvc ();

var containerBuilder = ny ContainerBuilder ();

containerBuilder.Populate (tjenester);

containerBuilder.RegisterType ().

Som();

var container = containerBuilder.Build ();

returbeholder.Resolve ();

   }

Bruk Autofac i kontrollerne i ASP.Net Core

Nå som Autofac er installert og konfigurert i prosjektet ditt, kan du komme i gang med å bruke det i kontrollerne. Følgende kodebit illustrerer hvordan du kan løse avhengigheter i ValuesController.

  offentlig klasse ValuesController: ControllerBase

  {

private IAuthorRepository _authorRepository;

public ValuesController (IAuthorRepository authorRepository)

        {

_authorRepository = authorRepository;

} // FÅ api / verdier

[HttpGet]

offentlig ActionResult Få ()

        {

returnere _authorRepository.GetMessage ();

        }

// Andre handlingsmetoder

  }

Avhengighetsinjeksjonsprinsippet er en realisering av inversjonen av kontrollprinsippet. Det er en teknikk som brukes til å fjerne avhengigheter fra implementering ved å tillate deg å injisere disse avhengighetene eksternt. Inversjon av kontrollbeholdere som Autofac benytter avhengighetsinjeksjon for å invertere kontrollflyten og bidra til å automatisere instantiering og livssyklusadministrasjon av objekter.

Avhengighetsinjeksjon tar tre former: konstruksjoninjeksjon, grensesnittinjeksjon og injeksjon av eiendom. I dette eksemplet brukte vi konstruktørinjeksjon for å injisere en avhengighet - nemlig en forekomst av typen AuthorRepository - ved kjøretid i klassen ValuesController.

Vi har sett hvordan Autofac kan brukes til å erstatte standardavhengighetsinjeksjonsbeholderen i ASP.Net Core, men vi har bare skrapet overflaten av funksjonene. Jeg vil utforske Autofac nærmere i fremtidige innlegg her.

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