Programování

Jak používat vkládání závislostí v ASP.Net Core

Podpora vkládání závislostí je zabudována do ASP.Net Core, open source, multiplatformního, štíhlého a modulárního rámce společnosti Microsoft pro vytváření vysoce výkonných škálovatelných webových aplikací. V ASP.Net Core mohou být do vašich tříd vloženy jak rámcové služby, tak aplikační služby, než aby byly pevně spojeny. V tomto článku se podíváme na to, jak můžeme pracovat s vkládáním závislostí v ASP.Net Core.

Vkládání závislostí (také známé jako DI) je návrhový vzor, ​​ve kterém má třída nebo objekt své závislé třídy vložené (předané jiné třídě nebo objektu), než aby je vytvářely přímo. Závislostní injekce usnadňuje uvolněné spojení a podporuje testovatelnost a údržbu. Kromě toho vám injekce závislostí umožňuje změnit vaše implementace, aniž byste museli měnit třídy nebo rozhraní, která tyto implementace využívají.

Zpřístupnění služby prostřednictvím vkládání závislostí v ASP.Net

Nyní vytvoříme jednoduchou službu v sadě Visual Studio pomocí ASP.Net Core a ilustrujeme, jak ji můžeme přidat do kontejneru pro vkládání závislostí, zaregistrovat ji pomocí kanálu a poté ji využít v naší aplikaci. Pomocí těchto kroků vytvořte nový projekt ASP.Net Core v sadě Visual Studio 2017 nebo Visual Studio 2015. Pokud používáte Visual Studio 2015, ujistěte se, že máte nainstalovanou .Net Core.

  1. Otevřete Visual Studio
  2. Klikněte na Soubor -> Nový -> Projekt
  3. V dialogovém okně Nový projekt vyberte šablonu projektu „Webová aplikace ASP.NET Core“
  4. Zadejte název a umístění projektu a uložte jej kliknutím na OK

Nyní vytvořte následující třídu POCO (prostý starý objekt CLI). Tato třída obsahuje pouze jednu vlastnost - představuje všechny tematické oblasti, které pokrývají autoři konkrétní vydavatelské společnosti.

veřejná třída TopicArea

    {

veřejný řetězec Název {get; soubor; }

    }

Zvažte následující pojmenované rozhraní ITopicAreaService která představuje smlouvu na TopicAreaService.

veřejné rozhraní ITopicAreaService

    {

IEnumerable GetAllTopicAreas ();

    }

The ITopicAreaService rozhraní obsahuje deklaraci jedné volané metody GetAllTopicAreas (). The TopicAreaService třída implementuje ITopicAreaService Jak je ukázáno níže.

veřejná třída TopicAreaService: ITopicAreaService

    {

public IEnumerable GetAllTopicAreas ()

        {

vrátit nový seznam

        {

nový TopicArea {Name},

nový TopicArea {Name},

nový TopicArea {Name}

        };

        }

    }

Registrace služeb pro vkládání závislostí v ASP.Net

Dalším krokem je registrace souboru TopicAreaService s kontejnerem pro vkládání závislostí dostupným jako součást kódu ASP.Net. Chcete-li to provést, napište do kódu následující část kódu Konfigurovat služby metoda v souboru Startup.cs. The Konfigurovat služby method adds services to the services container, which makes them available in your app via dependency injection. Volá se runtime automaticky.

public void ConfigureServices (služby IServiceCollection)

        {

services.AddTransient ();

// Přidat rámcové služby.

services.AddMvc ();

        }

Pokud máte více služeb, které je třeba zaregistrovat, můžete použít metodu rozšíření, jak je znázorněno níže.

veřejná statická třída ServiceExtensions

    {

public static IServiceCollection RegisterServices (

tato služba IServiceCollection)

        {

services.AddTransient ();

// Zde přidejte všechny ostatní služby.

návratové služby;

        }

    }

Za použití RegisterServices Metoda vám umožňuje zachovat Konfigurovat služby metoda štíhlá a udržovatelná. Místo zadávání jednotlivých služeb v Konfigurovat služby, vše, co musíte udělat, je zavolat na RegisterServices metoda rozšíření jednou ve vašem Konfigurovat služby metoda, jak je uvedeno v úryvku kódu níže.

public void ConfigureServices (služby IServiceCollection)

        {

services.RegisterServices ();

// Přidat rámcové služby.

services.AddMvc ();

        }

Životnost injekcí závislostí v ASP.Net

Životnost injekce závislosti se používá k určení, kdy jsou závislé objekty vytvořeny a znovu vytvořeny. Co se týče životnosti instancí injekce závislostí v aplikacích ASP.Net Core, existují tři možnosti:

  1. Singleton: To znamená, že bude vytvořena a sdílena všemi spotřebiteli pouze jedna instance.
  2. Rozsah: To znamená, že bude vytvořena jedna instance na obor (tj. Jedna instance na požadavek aplikace).
  3. Přechodné: To znamená, že komponenty nebudou sdíleny, ale budou vytvořeny pokaždé, když budou vyžádány.

Všimněte si, že v tomto příkladu jsme použili Přechodné typ. Následující fragment kódu ukazuje, jak můžete při registraci své služby použít jiné typy životnosti.

services.AddScoped ();

services.AddSingleton ();

Používání služby prostřednictvím vkládání závislostí v ASP.Net

Nyní, když jsme do kanálu přidali službu, kterou jsme implementovali, můžete ji použít v kterémkoli z řadičů ve vašem projektu ASP.Net Core. Následující fragment kódu ukazuje, jak můžete požádat o instanci TopicAreaService ve vašem ovladači.

soukromé jen pro čtení ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

    {

_topicAreaService = topicAreaService;

    }

Zde je návod, jak GetAllTopicAreas metoda TopicAreaService je volána z akční metody vašeho ovladače.

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

návrat _topicAreaService.GetAllTopicAreas ();

        }

Níže je uveden kompletní seznam kódů třídy řadičů pro vaši referenci.
pomocí Microsoft.AspNetCore.Mvc;

pomocí System.Collections.Generic;

jmenný prostor ASPNETCoreDI.Controllers

{

[Produkuje („application / json“)]

[Route („api / Default“)]

veřejná třída DefaultController: Controller

    {

soukromé jen pro čtení ITopicAreaService _topicAreaService;

public DefaultController (ITopicAreaService topicAreaService)

        {

_topicAreaService = topicAreaService;

        }

[HttpGet]

public IEnumerable GetAllTopicAreas ()

        {

návrat _topicAreaService.GetAllTopicAreas ();

        }

    }

}

Integrovanou podporu pro vkládání závislostí v ASP.Net Core můžete využít k vytváření modulárních, štíhlých a čistých aplikací, které se snadno udržují a testují. Integrovaný poskytovatel vkládání závislostí v ASP.Net Core není tak bohatý na funkce jako kontejnery jako StructureMap a Ninject, ale je poměrně rychlý a, jak jsme viděli, snadno se konfiguruje a používá.

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