Hur man använder beroendeberoende i ASP.Net Core

Stöd för beroendeberoende är inbyggt i ASP.Net Core, Microsofts öppen källkod, plattform, smal och modulär ram för att bygga högpresterande, skalbara webbapplikationer. I ASP.Net Core kan både ramtjänster och applikationstjänster injiceras i dina klasser, snarare än att de är tätt kopplade. I den här artikeln tittar vi på hur vi kan arbeta med beroendeinjektion i ASP.Net Core.

Beroendeinjektion (även känd som DI) är ett designmönster där en klass eller ett objekt får sina beroende klasser injicerade (skickas till det av en annan klass eller ett annat objekt) snarare än att skapa dem direkt. Beroendeinjektion underlättar lös koppling och främjar testbarhet och underhåll. Dessutom möjliggör injektionsberoende dig att ändra dina implementeringar utan att behöva ändra klasserna eller gränssnitten som utnyttjar dessa implementeringar.

Göra en tjänst tillgänglig via beroendeinjektion i ASP.Net

Vi kommer nu att bygga en enkel tjänst i Visual Studio med hjälp av ASP.Net Core och illustrera hur vi kan lägga till den i beroendeinsprutningsbehållaren, registrera den med pipelinen och sedan konsumera den i vår applikation. Följ dessa steg för att skapa ett nytt ASP.Net Core-projekt i Visual Studio 2017 eller Visual Studio 2015. Om du använder Visual Studio 2015, se till att du har installerat .Net Core.

  1. Öppna Visual Studio
  2. Klicka på Arkiv -> Nytt -> Projekt
  3. I dialogrutan Nytt projekt väljer du projektmallen “ASP.NET Core Web Application”
  4. Ange projektets namn och plats och klicka på OK för att spara

Skapa nu följande POCO-klass (vanligt gammalt CLI-objekt). Den här klassen innehåller bara en egenskap - den representerar alla ämnesområden som omfattas av författarna till ett visst förlag.

allmän klass TopicArea

    {

        public string Name {get; uppsättning; }

    }

Tänk på följande gränssnitt med namnet ITopicAreaServicesom representerar kontraktet för TopicAreaService.

offentligt gränssnitt ITopicAreaService

    {

        IEnumerable GetAllTopicAreas ();

    }

I ITopicAreaServicegränssnittet innehåller deklarationen av en metod som kallas GetAllTopicAreas(). De TopicAreaServiceklass implementerar den ITopicAreaServicesom visas nedan.

public class TopicAreaService: ITopicAreaService

    {

        offentlig IEnumerable GetAllTopicAreas ()

        {

            returnera ny lista

        {

            nytt TopicArea {Name},

            nytt TopicArea {Name},

            nytt TopicArea {Name}

        };

        }

    }

Registrera tjänster för beroendeinjektion i ASP.Net

Nästa steg är att registrera TopicAreaServicebehållaren för beroendeinsprutning tillgänglig som en del av ASP.Net-koden. För att göra detta, skriv följande kod i ConfigureServicesmetoden i filen Startup.cs. Den ConfigureServicesmetod lägger tjänster till tjänster container, vilket gör dem tillgängliga i appen via beroende injektion. Det anropas automatiskt av körtiden.

public void ConfigureServices (IServiceCollection services)

        {

            tjänster.AddTransient ();

            // Lägg till ramtjänster.

            services.AddMvc ();

        }

Om du har flera tjänster som måste registreras kan du använda en förlängningsmetod enligt nedan.

offentlig statisk klass ServiceExtensions

    {

        public static IServiceCollection RegisterServices (

            denna IServiceCollection-tjänster)

        {

            tjänster.AddTransient ();

            // Lägg till alla andra tjänster här.

            returtjänster;

        }

    }

Genom att använda RegisterServicesmetoden kan du hålla din ConfigureServicesmetod smal och underhållbar. Istället för att ange varje tjänst i ConfigureServicesär allt du behöver göra att ringa RegisterServicestilläggsmetoden en gång i din ConfigureServicesmetod som visas i kodavsnittet nedan.

public void ConfigureServices (IServiceCollection services)

        {

            services.RegisterServices ();

            // Lägg till ramtjänster.

            services.AddMvc ();

        }

Beroende injektion livstider i ASP.Net

Beroendeinjektionens livslängd används för att ange när de beroende objekten skapas och skapas på nytt. När det gäller livstider för förekomster av beroendeinsprutning i ASP.Net Core-applikationer finns det tre möjligheter:

  1. Singleton: Detta innebär att endast en enda instans skapas och delas av alla konsumenter.
  2. Scoped: Detta innebär att en instans per scope (dvs. en instans per begäran till applikationen) skapas.
  3. Transient: Detta innebär att komponenterna inte kommer att delas utan skapas varje gång de begärs.

Observera att i det här exemplet har vi använt Transienttypen. Följande kodavsnitt illustrerar hur du kan använda andra typer av livstid när du registrerar din tjänst.

tjänster.AddScoped ();

tjänster.AddSingleton ();

Använda en tjänst via beroendeberoende i ASP.Net

Nu när tjänsten vi implementerat har lagts till i rörledningen kan du använda den i valfri styrenhet i ditt ASP.Net Core-projekt. Följande kodavsnitt illustrerar hur du kan begära en instans av TopicAreaServicei din controller.

privat readonly ITopicAreaService _topicAreaService;

    public DefaultController (ITopicAreaService topicAreaService)

    {

        _topicAreaService = topicAreaService;

    }

Så här kallas GetAllTopicAreasmetoden för den TopicAreaServicefrån din handlings handlingsmetod.

[HttpGet]

        offentlig IEnumerable GetAllTopicAreas ()

        {

            returnera _topicAreaService.GetAllTopicAreas ();

        }

Nedan följer den kompletta kodlistan för kontrollerklassen för din referens.
med hjälp av Microsoft.AspNetCore.Mvc;

använder System.Collections.Generic;

namnområde ASPNETCoreDI.Controllers

{

    [Producerar (“applikation / json”)]

    [Rutt (“api / standard”)]

    offentlig klass DefaultController: Controller

    {

        privat readonly ITopicAreaService _topicAreaService;

        public DefaultController (ITopicAreaService topicAreaService)

        {

            _topicAreaService = topicAreaService;

        }

        [HttpGet]

        offentlig IEnumerable GetAllTopicAreas ()

        {

            returnera _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Du kan utnyttja det inbyggda stödet för beroendeinsprutning i ASP.Net Core för att bygga applikationer som är modulära, magra och rena, lätta att underhålla och testa. Den inbyggda leverantören av beroendeinsprutning i ASP.Net Core är inte lika funktionsrik som behållare som StructureMap och Ninject, men det är ganska snabbt och, som vi har sett, lätt att konfigurera och använda.