Programovanie

Ako používať vkladanie závislostí v ASP.Net Core

Podpora vkladania závislostí je zabudovaná do ASP.Net Core, open source, multiplatformného a modulárneho rámca spoločnosti Microsoft pre vytváranie vysoko výkonných škálovateľných webových aplikácií. V ASP.Net Core môžu byť do vašich tried vložené obe rámcové služby a aplikačné služby, než aby boli pevne spojené. V tomto článku sa pozrieme na to, ako môžeme pracovať s vkladaním závislostí v ASP.Net Core.

Vkladanie závislostí (tiež známe ako DI) je návrhový vzor, ​​do ktorého má trieda alebo objekt vložené svoje závislé triedy (odovzdané do inej triedy alebo objektu) namiesto ich priameho vytvárania. Závislé vstrekovanie uľahčuje uvoľnené spojenie a podporuje testovateľnosť a údržbu. Injekcia závislostí vám navyše umožňuje meniť implementácie bez toho, aby ste museli meniť triedy alebo rozhrania, ktoré tieto implementácie využívajú.

Sprístupnenie služby prostredníctvom vkladania závislostí v ASP.Net

Teraz v Visual Studio zostavíme jednoduchú službu pomocou ASP.Net Core a ukážeme si, ako ju môžeme pridať do kontajnera na vkladanie závislostí, zaregistrovať ju pomocou potrubia a potom ju spotrebovať v našej aplikácii. Postupujte podľa týchto pokynov na vytvorenie nového projektu ASP.Net Core v Visual Studio 2017 alebo Visual Studio 2015. Ak používate Visual Studio 2015, uistite sa, že máte nainštalovaný .Net Core.

  1. Otvorte Visual Studio
  2. Kliknite na položky Súbor -> Nové -> Projekt
  3. V dialógovom okne Nový projekt vyberte šablónu projektu „Webová aplikácia ASP.NET Core“
  4. Zadajte názov a umiestnenie projektu a uložte ho kliknutím na tlačidlo OK

Teraz vytvorte nasledujúcu triedu POCO (obyčajný starý objekt CLI). Táto trieda obsahuje iba jednu vlastnosť - predstavuje všetky tematické oblasti, ktoré pokrývajú autori konkrétnej vydavateľskej spoločnosti.

verejná trieda TopicArea

    {

verejný reťazec Názov {get; sada; }

    }

Zvážte pomenovanie nasledujúceho rozhrania ITopicAreaService ktorá predstavuje zmluvu pre TopicAreaService.

verejné rozhranie ITopicAreaService

    {

IEnumerable GetAllTopicAreas ();

    }

The ITopicAreaService rozhranie obsahuje deklaráciu jednej volanej metódy GetAllTopicAreas (). The TopicAreaService trieda implementuje ITopicAreaService ako je uvedené nižšie.

verejná trieda TopicAreaService: ITopicAreaService

    {

verejné IEnumerable GetAllTopicAreas ()

        {

vrátiť nový zoznam

        {

nová téma TopicArea {Name},

nová téma TopicArea {Name},

nová TopicArea {Name}

        };

        }

    }

Registrácia služieb pre vkladanie závislostí v ASP.Net

Ďalším krokom je registrácia TopicAreaService s kontajnerom na vkladanie závislostí, ktorý je k dispozícii ako súčasť kódu ASP.Net. Za týmto účelom napíšte do kódu Konfigurovať služby metóda v súbore Startup.cs. The Konfigurovať služby metóda pridáva služby do kontajnera služieb, vďaka čomu sú dostupné vo vašej aplikácii prostredníctvom vkladania závislostí. Volá sa za behu automaticky.

public void ConfigureServices (služby IServiceCollection)

        {

services.AddTransient ();

// Pridať rámcové služby.

services.AddMvc ();

        }

Ak máte viac služieb, ktoré je potrebné zaregistrovať, môžete použiť metódu rozšírenia, ako je uvedené nižšie.

verejná statická trieda ServiceExtensions

    {

verejná statická služba IServiceCollection RegisterServices (

táto služba IServiceCollection)

        {

services.AddTransient ();

// Tu pridajte všetky ostatné služby.

návratové služby;

        }

    }

Pomocou RegisterServices metóda umožňuje ponechať si Konfigurovať služby metóda štíhla a udržiavateľná. Namiesto určovania jednotlivých služieb v Konfigurovať služby, všetko, čo musíte urobiť, je zavolať na RegisterServices rozšírenie metóda raz vo vašom Konfigurovať služby uvedenou v útržku kódu nižšie.

public void ConfigureServices (služby IServiceCollection)

        {

services.RegisterServices ();

// Pridať rámcové služby.

services.AddMvc ();

        }

Životnosť závislostí vstrekovania v ASP.Net

Životnosť vloženia závislosti sa používa na určenie, kedy sa závislé objekty vytvárajú a znova vytvárajú. Pokiaľ ide o životnosť inštancií injektáže závislostí v aplikáciách ASP.Net Core, existujú tri možnosti:

  1. Singleton: To znamená, že všetci spotrebitelia vytvoria a budú zdieľať iba jednu inštanciu.
  2. Rozsah: To znamená, že sa vytvorí jedna inštancia na každý rozsah (t. J. Jedna inštancia na žiadosť aplikácie).
  3. Prechodné: To znamená, že komponenty nebudú zdieľané, ale budú vytvorené vždy, keď sú požadované.

Upozorňujeme, že v tomto príklade sme použili znak Prechodné typu. Nasledujúci úryvok kódu ilustruje, ako môžete pri registrácii svojej služby použiť ďalšie typy životnosti.

services.AddScoped ();

služby.AddSingleton ();

Používanie služby prostredníctvom vkladania závislostí v ASP.Net

Teraz, keď sme do kanálu pridali službu, ktorú sme implementovali, môžete ju použiť v ktoromkoľvek z radičov vo vašom projekte ASP.Net Core. Nasledujúci úryvok kódu ilustruje, ako môžete požiadať o inštanciu súboru TopicAreaService vo vašom ovládači.

súkromné ​​iba na čítanie ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

    {

_topicAreaService = topicAreaService;

    }

Tu je postup, ako GetAllTopicAreas metóda TopicAreaService sa volá z metódy akcie ovládača.

[HttpGet]

verejné IEnumerable GetAllTopicAreas ()

        {

return _topicAreaService.GetAllTopicAreas ();

        }

Ďalej je uvedený kompletný zoznam kódov triedy radičov pre vašu referenciu.
pomocou Microsoft.AspNetCore.Mvc;

pomocou System.Collections.Generic;

menný priestor ASPNETCoreDI.Controlers

{

[Produkuje („application / json“)]

[Route („api / Default“)]

verejná trieda DefaultController: radič

    {

súkromné ​​iba na čítanie ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

        {

_topicAreaService = topicAreaService;

        }

[HttpGet]

verejné IEnumerable GetAllTopicAreas ()

        {

return _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Integrovanú podporu pre vkladanie závislostí v ASP.Net Core môžete využiť na vytváranie modulárnych, štíhlych a čistých aplikácií, ktoré sa ľahko udržiavajú a testujú. Zabudovaný poskytovateľ injektáže závislostí v ASP.Net Core nie je taký bohatý na funkcie ako kontajnery ako StructureMap a Ninject, ale je dosť rýchly a ako sme videli, ľahko sa konfiguruje a používa.

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