Programovanie

Ako implementovať DI do WebAPI pomocou NInject

Injekcia závislostí je vzor návrhu softvéru, ktorý vám pomôže vytvoriť zásuvné implementácie vo vašej aplikácii pomocou voľne spojených a testovateľných komponentov. Eliminuje pevne zakódované závislosti medzi typmi a uľahčuje vytváranie, testovanie a údržbu vašich typov v priebehu času. Návrhový vzor IOC (Inversion of Control) uvádza, že objekty by nemali vykonávať objekty, na ktorých sú závislé, aby mohli vykonávať nejakú činnosť.

Máte veľa kontajnerov IOC, ktoré vám pomôžu pri automatickom vytváraní inštancií a správe životného cyklu objektov. Pamätajte, že injekcia závislostí je podmnožinou princípu IOC. Kontajnery IOC využívajú vstrekovanie závislostí na invertovanie toku riadenia.

Začíname

Na začiatok s touto implementáciou vytvorte nový projekt WebAPI v Visual Studio. Ďalej nainštalujte potrebné balíčky z NuGet pre prácu s NInject. Balík Ninject.Web.WebApi.WebHost môžete nainštalovať pomocou správcu balíkov NuGet. Takto by sa vám následne nainštalovali nasledujúce dva balíčky.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Vkladanie závislostí pomocou NInject

Po úspešnej inštalácii balíka Ninject.Web.WebApi.WebHost sa súbor NInject.WebCommon.cs automaticky vytvorí v priečinku App_Start vo vašom projekte. Vygenerovalo by sa veľa štandardných kódov - jednoducho ich ignorujte a odkazujte na metódu RegisterServices (). Na prvý pohľad by mohla vyzerať táto metóda.

private static void RegisterServices (jadro IKernel)

{

}

Na registráciu služieb alebo na vloženie závislostí by ste museli napísať kód pomocou metódy RegisterServices. K tomu sa vrátime neskôr v tomto článku.

V tomto príklade budeme používať injektor konštruktora - typ injektáže závislostí, pri ktorom sa cez konštruktory injektuje jedna alebo viac závislostí. Medzi ďalšie dva typy vstrekovania závislostí patria: vstrekovanie setra a vstrekovanie rozhrania. Podrobne som sa tomu venoval v jednom zo svojich predchádzajúcich príspevkov.

V ďalšom kroku vytvorte nový radič s názvom AuthorsController do projektu WebAPI, ktorý ste vytvorili. Nahraďte predvolený kód AuthorsController kódom uvedeným nižšie.

verejná trieda AuthorsController: ApiController

    {

súkromné ​​readonly úložisko IAuthorRepository;

public AuthorsController (úložisko IAuthorRepository)

        {

this.repository = úložisko;

        }

verejný zoznam Získať ()

        {

návratové úložisko.GetAllAuthors ();

        }

    }

AuthorsController obsahuje iba na čítanie odkaz na rozhranie IAuthorRepository, konštruktor argumentov a metódu akcie Get. Všimnite si, že AuthorsController používa na vloženie závislosti konštruktor, t. J. Je to konštruktor argumentov, ktorý ako parameter prijíma odkaz na rozhranie IAuthorRepository. Rozhranie IAuthorRepository je implementované triedou AuthorRepository. Takto vyzerá rozhranie IAuthorRepository.

verejné rozhranie IAuthorRepository

    {

Zoznam GetAllAuthors ();

    }

Metóda GetAllAuthors () sa používa na vrátenie zoznamu autorov. Mená autorov sú napevno. Trieda AuthorRepository implementuje metódu GetAllAuthors, ako je uvedené nižšie.

verejná trieda AuthorRepository: IAuthorRepository

    {

verejný zoznam GetAllAuthors ()

        {

Autori zoznamu = nový Zoznam ();

autori.Pridať („Joydip“);

autori.Pridať („Peťo“);

autori.Pridať („Steve“);

návratoví autori;

        }

    }

Registrácia našich služieb u Ninject

Tento krok je dosť jednoduchý. Pamätáte si, že sme už predtým hovorili o metóde RegisterServices? Patrí do statickej triedy NinjectWebCommon v súbore NinjectWebCommon.cs. Tu je ukážka toho, ako môžete pomocou metódy RegisterServices vyriešiť závislosti.

private static void RegisterServices (jadro IKernel)

{

kernel.Bind (). To ();

A to je všetko, čo musíte urobiť. Ak uvidíte akékoľvek runtime chyby súvisiace s NInject, môže to byť spôsobené ActivationException. Ak to chcete opraviť, mali by ste si nainštalovať najnovšiu verziu balíka Ninject.Web.WebApi. Stačí znova inovovať program Ninject.Web.WebApi, znova ho skompilovať a potom znova spustiť aplikáciu.

V tomto príspevku sa môžete pozrieť na ďalšie informácie o tom, ako môžeme použiť NInject s WebAPI.

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