Programmēšana

Kā izmantot atkarības injekciju ASP.Net Core

Atkarības injicēšanas atbalsts ir iebūvēts ASP.Net Core, Microsoft atvērtā koda, starpplatformu, liesās un modulārās ietvarstruktūrās, lai izveidotu augstas veiktspējas, pielāgojamas tīmekļa lietojumprogrammas. Programmā ASP.Net Core gan pamatpakalpojumus, gan lietojumprogrammu pakalpojumus var ievadīt jūsu klasēs, nevis cieši saistīt. Šajā rakstā mēs aplūkosim, kā mēs varam strādāt ar atkarības ievadīšanu ASP.Net Core.

Atkarības iesmidzināšana (pazīstama arī kā DI) ir dizaina shēma, kurā klasei vai objektam tiek injicētas atkarīgās klases (ko tai nodod cita klase vai objekts), nevis tās tieši izveido. Atkarības iesmidzināšana atvieglo brīvu savienošanu un veicina pārbaudāmību un uzturēšanu. Turklāt atkarības ievadīšana ļauj mainīt ieviešanu, nemainot klases vai saskarnes, kas veicina šo ieviešanu.

Pakalpojuma padarīšana pieejama, izmantojot atkarības injekciju ASP.Net

Tagad mēs izveidosim vienkāršu pakalpojumu Visual Studio, izmantojot ASP.Net Core, un parādīsim, kā mēs varam to pievienot atkarības iesmidzināšanas konteineram, reģistrēt cauruļvadā un pēc tam to izmantot mūsu lietojumprogrammā. Veiciet šīs darbības, lai izveidotu jaunu ASP.Net Core projektu Visual Studio 2017 vai Visual Studio 2015. Ja izmantojat Visual Studio 2015, pārliecinieties, vai esat instalējis .Net Core.

  1. Atveriet Visual Studio
  2. Noklikšķiniet uz File -> New -> Project
  3. Dialoglodziņā Jauns projekts atlasiet projekta veidni “ASP.NET Core Web Application”
  4. Norādiet sava projekta nosaukumu un vietu un noklikšķiniet uz Labi, lai saglabātu

Tagad izveidojiet šādu POCO (vienkāršs vecs CLI objekts) klasi. Šajā klasē ir tikai viens īpašums - tas atspoguļo visas tēmas, uz kurām attiecas konkrētas izdevniecības firmas autori.

sabiedrības klase TopicArea

    {

public string Vārds {get; komplekts; }

    }

Apsveriet šo nosaukto interfeisu ITopicAreaService kas pārstāv līgumu par TopicAreaService.

publiskā saskarne ITopicAreaService

    {

ISkaitāmie GetAllTopicAreas ();

    }

The ITopicAreaService interfeiss satur vienas metodes, ko sauc, deklarāciju GetAllTopicAreas (). The TopicAreaService klase īsteno ITopicAreaService kā parādīts zemāk.

publiskā klase TopicAreaService: ITopicAreaService

    {

public IEnumerable GetAllTopicAreas ()

        {

atgriezt jaunu sarakstu

        {

jauns TopicArea {Name},

jauns TopicArea {Name},

jauns TopicArea {Name}

        };

        }

    }

Pakalpojumu reģistrēšana atkarības injicēšanai ASP.Net

Nākamais solis ir reģistrēt TopicAreaService ar atkarības iesmidzināšanas konteineru, kas pieejams kā daļa no ASP.Net koda. Lai to izdarītu, ierakstiet ConfigureServices metodi failā Startup.cs. The ConfigureServices metode pakalpojumu pakalpojumus pievieno pakalpojumu konteineram, kas padara tos pieejamus jūsu lietotnē, izmantojot atkarības injekciju. Izpildlaiks to izsauc automātiski.

public void ConfigureServices (IServiceCollection pakalpojumi)

        {

pakalpojumi.AddTransient ();

// Pievienojiet ietvara pakalpojumus.

pakalpojumi.AddMvc ();

        }

Ja jums ir vairāki pakalpojumi, kas jāreģistrē, varat izmantot paplašināšanas metodi, kā parādīts zemāk.

publiskā statiskā klase ServiceExtensions

    {

publiskais statiskais IServiceCollection RegisterServices (

šie IServiceCollection pakalpojumi)

        {

pakalpojumi.AddTransient ();

// Pievienojiet šeit visus citus pakalpojumus.

atgriešanās pakalpojumi;

        }

    }

Izmantojot RegisterServices metode ļauj jums saglabāt savu ConfigureServices metode liesa un uzturama. Tā vietā, lai norādītu katru pakalpojumu ConfigureServices, viss, kas jums jādara, ir piezvanīt RegisterServices paplašināšanas metode vienreiz jūsu ConfigureServices metodi, kā parādīts tālāk esošajā koda fragmentā.

public void ConfigureServices (IServiceCollection pakalpojumi)

        {

pakalpojumi.RegistrētiesPakalpojumi ();

// Pievienojiet ietvara pakalpojumus.

pakalpojumi.AddMvc ();

        }

Atkarības injekcijas kalpošanas laiks ASP.Net

Atkarības injekcijas kalpošanas laiks tiek izmantots, lai norādītu, kad tiek izveidoti un no jauna izveidoti atkarīgie objekti. Kas attiecas uz atkarības injekcijas gadījumu dzīves ilgumu ASP.Net Core lietojumprogrammās, ir trīs iespējas:

  1. Singletons: Tas nozīmē, ka visiem patērētājiem tiks izveidots un koplietots tikai viens gadījums.
  2. Darbības joma: tas nozīmē, ka katrā darbības jomā tiks izveidots viens eksemplārs (t.i., viens eksemplārs katram pieprasījumam lietojumprogrammai).
  3. Pārejošs: tas nozīmē, ka komponenti netiks kopīgoti, bet tiks izveidoti katru reizi, kad tie tiks pieprasīti.

Ņemiet vērā, ka šajā piemērā mēs izmantojām Pārejošs tips. Šis koda fragments parāda, kā reģistrējot pakalpojumu var izmantot citus mūža veidus.

pakalpojumi.AddScoped ();

pakalpojumi.AddSingleton ();

Pakalpojuma izmantošana, izmantojot atkarības injekciju ASP.Net

Tagad, kad mūsu ieviestais pakalpojums ir pievienots cauruļvadam, varat to izmantot jebkurā no ASP.Net Core projekta kontrolieriem. Šis koda fragments parāda, kā jūs varat pieprasīt TopicAreaService savā kontrolierī.

privāts tikai lasāms ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

    {

_topicAreaService = topicAreaService;

    }

Lūk, kā GetAllTopicAreas metode TopicAreaService tiek izsaukts no jūsu kontroliera darbības metodes.

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

return _topicAreaService.GetAllTopicAreas ();

        }

Tālāk ir sniegts pilns kontroliera klases kodu saraksts jūsu atsaucei.
izmantojot Microsoft.AspNetCore.Mvc;

izmantojot System.Collections.Generic;

nosaukumvieta ASPNETCoreDI.Controllers

{

[Producē (“pieteikums / json”)]

[Maršruts (“api / Default”)]

publiskā klase DefaultController: kontrolieris

    {

privāts tikai lasāms ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

        {

_topicAreaService = topicAreaService;

        }

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

atgriezties _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Varat izmantot iebūvēto atbalstu atkarības injicēšanai ASP.Net Core, lai izveidotu modulāras, liesas un tīras, viegli kopjamas un pārbaudāmas lietojumprogrammas. ASP.Net Core iebūvētais atkarības injekcijas nodrošinātājs nav tik bagāts ar funkcijām kā konteineri, piemēram, StructureMap un Ninject, taču tas ir diezgan ātrs un, kā redzējām, viegli konfigurējams un lietojams.

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