Как да използвам Autofac в ASP.Net Core

Инжектирането на зависимостите улеснява свободното свързване и насърчава проверяемостта и поддръжката. ASP.Net Core осигурява вградена поддръжка за инжектиране на зависимости (вид инверсия на контрола) с минималистичен контейнер за инжектиране на зависимости. Въпреки това, вграденият контейнер липсва много от характеристиките на пълноценно впръскване на зависимост или инверсия на контролния контейнер.

За да преодолеете това, можете да използвате контейнери на трети страни в ASP.Net Core. С други думи, можете лесно да замените вградения контейнер с контейнер на трета страна. Autofac е инверсия на контролен контейнер, който може да се използва за разрешаване на зависимости. Тази статия предоставя дискусия за това как можем да работим с Autofac в ASP.Net Core.

Създайте ASP.Net Core проект в Visual Studio

Първо нека създадем ASP.Net Core проект в Visual Studio. Ако приемем, че Visual Studio 2017 или Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов проект ASP.Net Core в Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „ASP.Net Core Web Application“ от списъка с показаните шаблони.
  4. Щракнете върху Напред.
  5. В прозореца „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. Щракнете върху Създаване.
  7. В прозореца „Създаване на ново уеб приложение на ASP.Net Core“ изберете .Net Core като време на изпълнение и ASP.Net Core 2.2 (или по-нова версия) от падащия списък в горната част.
  8. Изберете „Уеб приложение“ като шаблон на проекта. 
  9. Уверете се, че квадратчетата „Активиране на поддръжката на Docker“ и „Конфигуриране за HTTPS“ са отметнати, тъй като тук няма да използваме тези функции.
  10. Уверете се, че удостоверяването е зададено като „Без удостоверяване“, тъй като и ние няма да използваме удостоверяване.
  11. Щракнете върху Създаване.

Това ще създаде нов проект на ASP.Net Core в Visual Studio. Ще използваме този проект в следващите раздели на тази статия за работа с Autofac.

Инсталирайте Autofac във вашия проект ASP.Net Core

Лесно е да инсталирате Autofac - можете да го инсталирате от NuGet. По време на писането настоящата версия на Autofac е 4.9.2. За да работите с Autofac, трябва да инсталирате и пакета Autofac.Extensions.DependencyInjection. Това ще гарантира, че имате инсталирани необходимите зависимости за работа с Autofac.

Изберете проекта за ASP.Net Core Web Application, който създадохте по-горе, след това щракнете с десния бутон и инсталирайте Autofac.Extensions.DependencyInjection чрез NuGet Package Manager. Приемете всички лицензионни споразумения, за които може да бъдете подканени по време на инсталацията. Като алтернатива можете да инсталирате този пакет, като въведете следната команда в конзолата NuGet Package Manager:

Install-Package Autofac.Extensions.DependencyInjection

Създайте клас във вашето приложение ASP.Net Core

За да илюстрираме инжектирането на зависимост, ще са ни необходими някои обекти, с които да работим. Помислете за интерфейса на IAuthorRepository, който съдържа декларацията на метода GetMessage по-долу.

 публичен интерфейс IAuthorRepository

    {

        низ GetMessage ();

    }

Класът AuthorRepository реализира интерфейса IAuthorRepository, както е показано по-долу.

 публичен клас AuthorRepository: IAuthorRepository

    {

        публичен низ GetMessage ()

        {

            връщане "Hello World";

        }

    }

Имайте предвид, че това е минималистично изпълнение на хранилище - т.е., то не съдържа CRUD методите, които типичното хранилище съдържа. Ще оставя на вас да внедрите CRUD методите по подходящ начин.

Конфигурирайте Autofac в ASP.Net Core

За да конфигурирате Autofac, трябва да посочите конфигурационния код в метода ConfigureServices на класа Startup. Имайте предвид, че методът ConfigureServices се използва за добавяне на услуги по време на изпълнение към контейнера.

Първата стъпка е да създадете конструктор на контейнери, за да регистрирате необходимите услуги с контейнера Autofac. Първата стъпка е да попълните фреймворк услугите, като използвате метода Populate, както е показано по-долу.

var containerBuilder = нов ContainerBuilder ();

containerBuilder.Populate (услуги);

Следващата стъпка е да регистрирате потребителските услуги в Autofac. За да направите това, използвайте метода RegisterType в екземпляра на конструктора на контейнери, както е показано по-долу.

containerBuilder.RegisterType (). As ();

За да изградите контейнера, напишете следния код.

var контейнер = containerBuilder.Build ();

контейнер за връщане.Резолюция ();

Ето пълния изходен код на метода ConfigureServices за справка:

публичен IServiceProvider ConfigureServices (IServiceCollection услуги)

   {

       услуги.AddMvc ();

       var containerBuilder = нов ContainerBuilder ();

       containerBuilder.Populate (услуги);

       containerBuilder.RegisterType ().

       Като();

       var контейнер = containerBuilder.Build ();

       контейнер за връщане.Резолюция ();

   }

Използвайте Autofac във вашите контролери в ASP.Net Core

След като Autofac е инсталиран и конфигуриран във вашия проект, можете да започнете да го използвате във вашите контролери. Следният кодов фрагмент илюстрира как можете да разрешите зависимости в ValuesController.

  публичен клас ValuesController: ControllerBase

  {

        частно IAuthorRepository _authorRepository; 

        публичен ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // ВЗЕМЕТЕ api / стойности

        [HttpGet]

        публичен ActionResult Вземете ()

        {

            return _authorRepository.GetMessage ();

        }

     // Други методи за действие

  }

Принципът на инжектиране на зависимост е реализация на принципа на инверсия на управление. Това е техника, която се използва за премахване на зависимостите от изпълнението, като ви позволява да инжектирате тези зависимости външно. Инверсията на контролни контейнери като Autofac се възползва от инжектирането на зависимости, за да обърне потока от контрол и помага за автоматизиране на създаването на екземпляри и управлението на жизнения цикъл на обектите.

Инжектирането на зависимост има три форми: инжектиране на конструктор, инжектиране на интерфейс и инжектиране на свойства. В този пример използвахме инжектиране на конструктор, за да инжектираме зависимост - а именно екземпляр от тип AuthorRepository - по време на изпълнение в класа ValuesController.

Видяхме как Autofac може да се използва за замяна на контейнера за инжектиране на зависимости по подразбиране в ASP.Net Core, но само надраскахме повърхността на неговите възможности. Ще изследвам Autofac по-задълбочено в бъдещи публикации тук.