Ohjelmointi

Kuinka riippuvuusinjektiota käytetään ASP.Net Core -sovelluksessa

Riippuvuussyötön tuki on sisäänrakennettu ASP.Net Core, Microsoftin avoimen lähdekoodin, monitasoinen, kevyt ja modulaarinen kehys korkean suorituskyvyn, skaalautuvien verkkosovellusten rakentamiseksi. ASP.Net Core -sovelluksessa sekä kehyspalvelut että sovelluspalvelut voidaan injektoida luokkiin sen sijaan, että ne olisivat tiukasti yhteydessä toisiinsa. Tässä artikkelissa tarkastellaan, miten voimme työskennellä riippuvuusinjektioiden kanssa ASP.Net Core -sovelluksessa.

Riippuvuusinjektio (tunnetaan myös nimellä DI) on suunnittelumalli, jossa luokkaan tai esineeseen riippuvat luokat injektoidaan (toisen luokan tai objektin välittämänä) sen sijaan, että luodaan ne suoraan. Riippuvuusinjektio helpottaa irrallista kytkentää ja edistää testattavuutta ja ylläpitoa. Lisäksi riippuvuussyötön avulla voit muuttaa toteutuksiasi muuttamatta luokkia tai rajapintoja, jotka hyödyntävät näitä toteutuksia.

Palvelun asettaminen saataville riippuvuusinjektiolla ASP.Netissä

Rakennamme nyt yksinkertaisen palvelun Visual Studioon käyttämällä ASP.Net Core -ohjelmaa ja havainnollistamme, kuinka voimme lisätä sen riippuvuuden injektiosäiliöön, rekisteröidä sen putkistoon ja käyttää sitä sitten sovelluksessamme. Luo uusi ASP.Net Core -projekti Visual Studio 2017: ssä tai Visual Studio 2015: ssä seuraavasti: Jos käytät Visual Studio 2015: tä, varmista, että .Net Core on asennettu.

  1. Avaa Visual Studio
  2. Valitse Tiedosto -> Uusi -> Projekti
  3. Valitse Uusi projekti -valintaikkunassa ASP.NET Core Web Application -projektimalli
  4. Määritä projektisi nimi ja sijainti ja tallenna napsauttamalla OK

Luo nyt seuraava POCO (tavallinen vanha CLI-objekti) -luokka. Tämä luokka sisältää vain yhden omaisuuden - se edustaa kaikkia tietyn julkaisuyhtiön kirjoittajien käsittelemiä aiheita.

julkisen luokan Aihealue

    {

julkinen merkkijono Nimi {get; aseta; }

    }

Harkitse seuraavaa nimettyä käyttöliittymää ITopicAreaService joka edustaa TopicAreaService.

julkinen käyttöliittymä ITopicAreaService

    {

Lukuisat GetAllTopicAreas ();

    }

ITopicAreaService käyttöliittymä sisältää yhden kutsutun menetelmän ilmoituksen GetAllTopicAreas (). TopicAreaService luokka toteuttaa ITopicAreaService kuten alla.

julkinen luokka TopicAreaService: ITopicAreaService

    {

public IEnumerable GetAllTopicAreas ()

        {

palauta uusi luettelo

        {

uusi TopicArea {Name},

uusi TopicArea {Name},

uusi TopicArea {Name}

        };

        }

    }

Palvelujen rekisteröinti riippuvuusinjektiota varten ASP.Net: ssä

Seuraava vaihe on rekisteröidä TopicAreaService riippuvuusinjektiosäiliön kanssa, joka on saatavana osana ASP.Net-koodia. Voit tehdä tämän kirjoittamalla seuraavan koodinpätkän ConfigureServices menetelmä Startup.cs-tiedostossa. ConfigureServices method lisää palvelut palvelusäiliöön, mikä tekee niistä saatavana sovelluksessasi riippuvuusinjektion avulla. Ajonaika kutsuu sitä automaattisesti.

public void ConfigureServices (IServiceCollection-palvelut)

        {

palvelut.AddTransient ();

// Lisää kehyspalvelut.

palvelut.AddMvc ();

        }

Jos sinulla on useita palveluja, jotka on rekisteröitävä, voit käyttää laajennusmenetelmää alla olevan kuvan mukaisesti.

julkinen staattinen luokka ServiceExtensions

    {

staattinen julkinen IServiceCollection RegisterServices (

tämä IServiceCollection-palvelu)

        {

palvelut.AddTransient ();

// Lisää kaikki muut palvelut tähän.

paluupalvelut;

        }

    }

Käyttämällä RegisterServices menetelmä antaa sinun pitää ConfigureServices menetelmä kevyt ja ylläpidettävä. Sen sijaan, että määrität jokaisen palvelun ConfigureServices, sinun tarvitsee vain soittaa RegisterServices laajennusmenetelmä kerran ConfigureServices menetelmä alla olevan koodikatkelman mukaisesti.

public void ConfigureServices (IServiceCollection-palvelut)

        {

palvelut.RegisterServices ();

// Lisää kehyspalvelut.

palvelut.AddMvc ();

        }

Riippuvuusinjektioiden käyttöajat ASP.Net-verkossa

Riippuvuuden ruiskutuksen käyttöikää käytetään määrittämään, milloin riippuvat objektit luodaan ja luodaan uudelleen. ASP.Net Core -sovellusten riippuvuusinjektiotapausten elinaikojen osalta on kolme mahdollisuutta:

  1. Singleton: Tämä tarkoittaa, että kaikki kuluttajat luovat ja jakavat vain yhden esiintymän.
  2. Laajennettu: Tämä tarkoittaa, että luodaan yksi esiintymä kutakin laajuutta kohti (ts. Yksi esiintymä kutakin sovelluspyyntöä kohti).
  3. Ohimenevä: Tämä tarkoittaa, että komponentteja ei jaeta, vaan ne luodaan aina, kun niitä pyydetään.

Huomaa, että tässä esimerkissä olemme käyttäneet Ohimenevä tyyppi. Seuraava koodinpätkä kuvaa, kuinka voit käyttää muun tyyppisiä käyttöikää palvelua rekisteröidessä.

palvelut.AddScoped ();

palvelut. AddSingleton ();

Palvelun käyttäminen riippuvuusinjektiolla ASP.Netissä

Nyt kun toteuttamamme palvelu on lisätty putkistoon, voit käyttää sitä missä tahansa ASP.Net Core -projektin ohjaimissa. Seuraava koodinpätkä kuvaa, kuinka voit pyytää TopicAreaService ohjaimessa.

yksityinen vain luku ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

    {

_topicAreaService = topicAreaService;

    }

Näin GetAllTopicAreas menetelmä TopicAreaService kutsutaan ohjaimen toimintatavasta.

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

return _topicAreaService.GetAllTopicAreas ();

        }

Alla on täydellinen ohjainluokan koodiluettelo viitteellesi.
käyttämällä Microsoft.AspNetCore.Mvc;

käyttämällä System.Collections.Generic;

nimitila ASPNETCoreDI.Controllers

{

[Tuottaa ("sovellus / json")]

[Reitti (“api / Default”)]

public class DefaultController: Ohjain

    {

yksityinen vain luku ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

        {

_topicAreaService = topicAreaService;

        }

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

return _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Voit hyödyntää sisäänrakennettua tukea riippuvuuden ruiskutukseen ASP.Net Core -sovelluksessa rakentaaksesi sovelluksia, jotka ovat modulaarisia, kevyitä ja puhtaita, helppo ylläpitää ja testata. ASP.Net Core -sisäänrakennettu riippuvuusinjektiopalveluiden tarjoaja ei ole yhtä monipuolinen kuin StructureMap- ja Ninject-kaltaiset säilöt, mutta se on melko nopea ja, kuten olemme nähneet, helppo konfiguroida ja käyttää.

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