Programování

Jak používat Autofac v ASP.Net Core

Závislostní injekce usnadňuje uvolněné spojení a podporuje testovatelnost a údržbu. ASP.Net Core poskytuje integrovanou podporu pro vkládání závislostí (druh inverze ovládání) s minimalistickým kontejnerem pro vkládání závislostí. Integrovaný kontejner však postrádá mnoho funkcí plnohodnotného vkládání závislostí nebo inverze ovládacího kontejneru.

Chcete-li to překonat, můžete použít kontejnery třetích stran v ASP.Net Core. Jinými slovy můžete snadno vyměnit vestavěný kontejner za kontejner jiného výrobce. Autofac je inverze ovládacího kontejneru, kterou lze použít k řešení závislostí. Tento článek poskytuje diskusi o tom, jak můžeme pracovat s Autofacem v ASP.Net Core.

Vytvořte projekt ASP.Net Core v sadě Visual Studio

Nejprve vytvořme projekt ASP.Net Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalována sada Visual Studio 2017 nebo Visual Studio 2019, vytvořte nový projekt ASP.Net Core v sadě Visual Studio podle pokynů uvedených níže.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze seznamu zobrazených šablon „Webová aplikace ASP.Net Core“.
  4. Klikněte na Další.
  5. V okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.
  7. V okně „Vytvořit novou webovou aplikaci ASP.Net Core“ vyberte jako běhové prostředí .Net Core a z rozevíracího seznamu v horní části ASP.Net Core 2.2 (nebo novější).
  8. Jako šablonu projektu vyberte „Web Application“.
  9. Ujistěte se, že políčka „Povolit podporu Dockeru“ a „Konfigurovat pro HTTPS“ nejsou zaškrtnuta, protože zde tyto funkce nebudeme používat.
  10. Ujistěte se, že je ověřování nastaveno na „Žádné ověřování“, protože také nebudeme používat ověřování.
  11. Klikněte na Vytvořit.

Tím se vytvoří nový projekt ASP.Net Core v sadě Visual Studio. Tento projekt použijeme v následujících částech tohoto článku pro práci s Autofacem.

Nainstalujte Autofac do projektu ASP.Net Core

Instalace Autofacu je snadná - můžete si jej nainstalovat z NuGet. V době psaní tohoto článku je aktuální verze Autofacu 4.9.2. Chcete-li pracovat s Autofac, měli byste nainstalovat také balíček Autofac.Extensions.DependencyInjection. Tím zajistíte, že máte nainstalované nezbytné závislosti pro práci s Autofacem.

Vyberte projekt webové aplikace ASP.Net Core, který jste vytvořili výše, poté klikněte pravým tlačítkem a nainstalujte Autofac.Extensions.DependencyInjection přes Správce balíčků NuGet. Přijměte všechny licenční smlouvy, které vás mohou během instalace vyzvat. Alternativně můžete tento balíček nainstalovat zadáním následujícího příkazu v konzole Správce balíčků NuGet:

Instalovat balíček Autofac.Extensions.DependencyInjection

Vytvořte třídu ve své aplikaci ASP.Net Core

Pro ilustraci vkládání závislostí budeme potřebovat nějaké objekty, se kterými budeme pracovat. Zvažte rozhraní IAuthorRepository, které obsahuje deklaraci metody GetMessage níže.

 veřejné rozhraní IAuthorRepository

    {

řetězec GetMessage ();

    }

Třída AuthorRepository implementuje rozhraní IAuthorRepository, jak je znázorněno níže.

 veřejná třída AuthorRepository: IAuthorRepository

    {

veřejný řetězec GetMessage ()

        {

návrat "Hello World";

        }

    }

Všimněte si, že se jedná o minimalistickou implementaci úložiště - tj. Neobsahuje metody CRUD, které obsahuje typické úložiště. Nechám na vás, abyste vhodně implementovali metody CRUD.

Nakonfigurujte Autofac v ASP.Net Core

Chcete-li nakonfigurovat Autofac, měli byste zadat konfigurační kód v metodě ConfigureServices třídy Startup. Všimněte si, že metoda ConfigureServices se používá k přidání služeb za běhu do kontejneru.

Prvním krokem je vytvoření nástroje pro vytváření kontejnerů k registraci potřebných služeb s kontejnerem Autofac. Prvním krokem je naplnění služeb rozhraní pomocí metody naplnění, jak je znázorněno níže.

var containerBuilder = nový ContainerBuilder ();

containerBuilder.Populate (služby);

Dalším krokem je registrace vlastních služeb na Autofacu. Chcete-li to provést, použijte metodu RegisterType na instanci tvůrce kontejneru, jak je znázorněno níže.

containerBuilder.RegisterType (). As ();

Chcete-li sestavit kontejner, napište následující kód.

var container = containerBuilder.Build ();

návratový kontejner.Resolve ();

Zde je kompletní zdrojový kód metody ConfigureServices pro vaši referenci:

veřejné IServiceProvider ConfigureServices (služby IServiceCollection)

   {

services.AddMvc ();

var containerBuilder = nový ContainerBuilder ();

containerBuilder.Populate (služby);

containerBuilder.RegisterType ().

Tak jako();

var container = containerBuilder.Build ();

návratový kontejner.Resolve ();

   }

Použijte Autofac ve svých řadičích v ASP.Net Core

Nyní, když byl ve vašem projektu nainstalován a nakonfigurován Autofac, můžete jej začít používat ve svých řadičích. Následující fragment kódu ukazuje, jak můžete vyřešit závislosti v ValuesController.

  veřejná třída ValuesController: ControllerBase

  {

private IAuthorRepository _authorRepository;

public ValuesController (IAuthorRepository authorRepository)

        {

_authorRepository = authorRepository;

} // ZÍSKAT rozhraní API / hodnoty

[HttpGet]

public ActionResult Get ()

        {

návrat _authorRepository.GetMessage ();

        }

// Jiné metody akce

  }

Princip injekce závislosti je realizací inverze principu řízení. Jedná se o techniku, která se používá k odebrání závislostí z implementace tím, že vám umožní vložit tyto závislosti externě. Inverze kontrolních kontejnerů, jako je Autofac, využívá vstřikování závislostí k invertování toku řízení a pomáhá automatizovat vytváření instancí a správu životního cyklu objektů.

Vkládání závislostí má tři formy: vstřikování konstruktoru, vkládání rozhraní a vkládání vlastností. V tomto příkladu jsme použili injektor konstruktoru k vložení závislosti - konkrétně instance typu AuthorRepository - za běhu ve třídě ValuesController.

Viděli jsme, jak lze Autofac použít k nahrazení výchozího kontejneru pro vkládání závislostí v ASP.Net Core, ale pouze jsme poškrábali povrch jeho schopností. V příštích příspěvcích zde prozkoumám Autofac podrobněji.