Programmering

Sådan bruges Autofac i ASP.Net Core

Afhængighedsindsprøjtning letter løs kobling og fremmer testbarhed og vedligeholdelse. ASP.Net Core giver indbygget support til afhængighedsinjektion (en slags inversion af kontrol) med en minimalistisk afhængighedsinjektionsbeholder. Imidlertid mangler den indbyggede container mange af funktionerne i en fuldgyldig afhængighedsinjektion eller inversion af kontrolcontaineren.

For at overvinde dette kan du bruge tredjepartscontainere i ASP.Net Core. Med andre ord kan du nemt udskifte den indbyggede container med en tredjepartscontainer. Autofac er en inversion af kontrolcontainer, der kan bruges til at løse afhængigheder. Denne artikel giver en diskussion af, hvordan vi kan arbejde med Autofac i ASP.Net Core.

Opret et ASP.Net Core-projekt i Visual Studio

Lad os først oprette et ASP.Net Core-projekt i Visual Studio. Forudsat at Visual Studio 2017 eller Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt ASP.Net Core-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "ASP.Net Core Web Application" fra listen over de viste skabeloner.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt" skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.
  7. I vinduet "Opret ny ASP.Net Core-webapplikation" skal du vælge .Net Core som runtime og ASP.Net Core 2.2 (eller nyere) fra rullelisten øverst.
  8. Vælg "Webapplikation" som projektskabelon.
  9. Sørg for, at afkrydsningsfelterne "Aktivér Docker-support" og "Konfigurer til HTTPS" ikke er markeret, da vi ikke bruger disse funktioner her.
  10. Sørg for, at godkendelse er indstillet som "Ingen godkendelse", da vi heller ikke bruger godkendelse.
  11. Klik på Opret.

Dette vil skabe et nyt ASP.Net Core-projekt i Visual Studio. Vi bruger dette projekt i de efterfølgende afsnit i denne artikel til at arbejde med Autofac.

Installer Autofac i dit ASP.Net Core-projekt

Det er let at installere Autofac - du kan installere det fra NuGet. På dette tidspunkt er den nuværende version af Autofac 4.9.2. For at arbejde med Autofac skal du også installere pakken Autofac.Extensions.DependencyInjection. Dette vil sikre, at du har de nødvendige afhængigheder installeret til at arbejde med Autofac.

Vælg det ASP.Net Core Web Application-projekt, du oprettede ovenfor, højreklik derefter og installer Autofac.Extensions.DependencyInjection via NuGet Package Manager. Accepter alle licensaftaler, du muligvis bliver bedt om under installationen. Alternativt kan du installere denne pakke ved at indtaste følgende kommando i NuGet Package Manager-konsol:

Installationspakke Autofac.Extensions.DependencyInjection

Opret en klasse i din ASP.Net Core-applikation

For at illustrere afhængighedsindsprøjtning har vi brug for nogle objekter at arbejde med. Overvej IAuthorRepository-grænsefladen, der indeholder erklæringen om GetMessage-metoden nedenfor.

 offentlig grænseflade IAuthorRepository

    {

streng GetMessage ();

    }

Klassen AuthorRepository implementerer IAuthorRepository-grænsefladen som vist nedenfor.

 public class AuthorRepository: IAuthorRepository

    {

offentlig streng GetMessage ()

        {

returner "Hello World";

        }

    }

Bemærk, at dette er en minimalistisk implementering af et lager - dvs. det indeholder ikke de CRUD-metoder, som et typisk lager indeholder. Jeg overlader det til dig at implementere CRUD-metoderne korrekt.

Konfigurer Autofac i ASP.Net Core

For at konfigurere Autofac skal du angive konfigurationskoden i metoden ConfigureServices i opstartklassen. Bemærk, at metoden ConfigureServices bruges til at tilføje tjenester ved kørsel til containeren.

Det første trin er at oprette en containerbygger, der registrerer de nødvendige tjenester i Autofac-containeren. Det første trin er at udfylde rammetjenesterne ved hjælp af Populate-metoden som vist nedenfor.

var containerBuilder = ny ContainerBuilder ();

containerBuilder.Populate (tjenester);

Det næste trin er at registrere de brugerdefinerede tjenester hos Autofac. For at gøre dette skal du bruge RegisterType-metoden på containerbyggerinstansen som vist nedenfor.

containerBuilder.RegisterType (). Som ();

For at bygge containeren skal du skrive følgende kode.

var container = containerBuilder.Build ();

returcontainer.Resolve ();

Her er den komplette kildekode til ConfigureServices-metoden til din reference:

offentlige IServiceProvider ConfigureServices (IServiceCollection-tjenester)

   {

services.AddMvc ();

var containerBuilder = ny ContainerBuilder ();

containerBuilder.Populate (tjenester);

containerBuilder.RegisterType ().

Som();

var container = containerBuilder.Build ();

returcontainer.Resolve ();

   }

Brug Autofac i dine controllere i ASP.Net Core

Nu hvor Autofac er installeret og konfigureret i dit projekt, kan du komme i gang med at bruge det i dine controllere. Følgende kodestykke illustrerer, hvordan du kan løse afhængigheder i ValuesController.

  public class ValuesController: ControllerBase

  {

privat IAuthorRepository _authorRepository;

public ValuesController (IAuthorRepository authorRepository)

        {

_authorRepository = authorRepository;

} // FÅ api / værdier

[HttpGet]

offentlig ActionResult Get ()

        {

returnere _authorRepository.GetMessage ();

        }

// Andre handlingsmetoder

  }

Princippet om afhængighedsinjektion er en realisering af inversionen af ​​kontrolprincippet. Det er en teknik, der bruges til at fjerne afhængigheder fra implementeringen ved at lade dig injicere disse afhængigheder eksternt. Inversion af kontrolcontainere som Autofac drager fordel af afhængighedsinjektion for at invertere strømmen af ​​kontrol og hjælpe med at automatisere instantiering og styring af genstande i livscyklus.

Afhængighedsinjektion har tre former: konstruktørinjektion, interfaceinjektion og ejendomsinjektion. I dette eksempel brugte vi konstruktionsinjektion til at injicere en afhængighed - nemlig en forekomst af typen AuthorRepository - ved kørsel i klassen ValuesController.

Vi har set, hvordan Autofac kan bruges til at erstatte standardbehandlingsindsprøjtningsbeholderen i ASP.Net Core, men vi har kun ridset overfladen af ​​dens muligheder. Jeg vil udforske Autofac nærmere i fremtidige indlæg her.