Programování

Jak implementovat DI ve WebAPI pomocí NInject

Injekce závislostí je návrhový vzor softwaru, který vám pomůže vytvořit zásuvné implementace ve vaší aplikaci pomocí volně spojených testovatelných komponent. Eliminuje pevně zakódované závislosti mezi typy a usnadňuje vytváření, testování a údržbu vašich typů v průběhu času. Návrhový vzor IOC (Inversion of Control) uvádí, že objekty by za účelem provádění určité činnosti neměly vytvářet objekty, na kterých jsou závislé.

Máte mnoho kontejnerů IOC, které vám pomohou při automatickém vytváření instancí a správě životního cyklu objektů. Všimněte si, že vkládání závislostí je podmnožinou principu IOC. Kontejnery IOC využívají injekci závislostí k invertování toku řízení.

Začínáme

Chcete-li začít s touto implementací, vytvořte nový projekt WebAPI v sadě Visual Studio. Dále nainstalujte potřebné balíčky z NuGet pro práci s NInject. Balíček Ninject.Web.WebApi.WebHost můžete nainstalovat pomocí Správce balíčků NuGet. To by vám následně nainstalovalo následující dva balíčky.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Injekce závislostí pomocí NInject

Jakmile je balíček Ninject.Web.WebApi.WebHost úspěšně nainstalován, je soubor NInject.WebCommon.cs automaticky vytvořen uvnitř složky App_Start ve vašem projektu. Bylo by vygenerováno spousta standardních kódů - prostě je ignorujte a odkazujte na metodu RegisterServices (). Na první pohled by tato metoda vypadala takto.

private static void RegisterServices (jádro IKernel)

{

}

Budete muset napsat svůj kód v RegisterServices metodě k registraci služeb nebo vložení závislostí. K tomu se vrátíme dále v tomto článku.

V tomto příkladu budeme používat injektor konstruktoru - typ injekce závislostí, ve kterém je jedna nebo více závislostí injektováno prostřednictvím konstruktorů. Mezi další dva typy vkládání závislostí patří: vkládání setteru a vkládání rozhraní. Podrobně jsem to popsal v jednom ze svých dřívějších příspěvků.

V dalším kroku vytvořte nový řadič s názvem AuthorsController do projektu WebAPI, který jste vytvořili. Nahraďte výchozí kód AuthorsController kódem uvedeným níže.

veřejná třída AuthorsController: ApiController

    {

soukromé úložiště pouze pro čtení IAuthorRepository;

public AuthorsController (úložiště IAuthorRepository)

        {

this.repository = úložiště;

        }

veřejný seznam Získat ()

        {

návratové úložiště.GetAllAuthors ();

        }

    }

AuthorsController obsahuje odkaz jen pro čtení na rozhraní IAuthorRepository, konstruktor argumentů a metodu akce Get. Všimněte si, že AuthorsController používá konstruktor k vložení závislosti, tj. Je to konstruktor argumentů, který jako parametr přijímá odkaz na rozhraní IAuthorRepository. Rozhraní IAuthorRepository je implementováno třídou AuthorRepository. Takto vypadá rozhraní IAuthorRepository.

veřejné rozhraní IAuthorRepository

    {

Seznam GetAllAuthors ();

    }

Metoda GetAllAuthors () se používá k vrácení seznamu autorů. Jména autorů jsou pevně zakódována. Třída AuthorRepository implementuje metodu GetAllAuthors, jak je znázorněno níže.

veřejná třída AuthorRepository: IAuthorRepository

    {

veřejný seznam GetAllAuthors ()

        {

Seznam autorů = nový Seznam ();

autoři.Přidat („Joydip“);

autoři.Přidat ("Pete");

autoři.Přidat („Steve“);

vrátit autory;

        }

    }

Registrace našich služeb u Ninject

Tento krok je docela jednoduchý. Pamatujete, že jsme metodu RegisterServices diskutovali dříve? Patří do statické třídy NinjectWebCommon v souboru NinjectWebCommon.cs. Zde je ukázka, jak můžete použít RegisterServices metodu k vyřešení závislostí.

private static void RegisterServices (jádro IKernel)

{

kernel.Bind (). To ();

A to je vše, co musíte udělat. Pokud uvidíte jakékoli runtime chyby související s NInject, může to být způsobeno ActivationException. Chcete-li to opravit, měli byste nainstalovat nejnovější verzi balíčku Ninject.Web.WebApi. Stačí znovu upgradovat Ninject.Web.WebApi, překompilovat a znovu spustit aplikaci.

V tomto příspěvku se můžete podívat na další informace o tom, jak můžeme použít NInject s WebAPI.

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