Autofac — это отличный вариант. NET IoC контейнеры. Он управляет зависимостями между классами, чтобы приложение можно было легко модифицировать по мере увеличения масштаба и сложности. Он реализуется путём рассмотрения обычных .NET-классов как компонентов. Я также клише по поводу контейнеров Autofac и написал много статей:
Создайте новый проект ASP.NET Core 3.1 и ссылайтесь на пакеты, связанные с autofac, через nuget, следующим образом:
Давайте создадим новый интерфейс и реализацию ITest, код выглядит следующим образом:
Создаём новый базовый класс-контроллер BaseController, и другие контроллеры наследуют абстрактный класс, добавляем свойство ITest к базовому классу, и код выглядит следующим образом:
Пусть WeatherForecastController наследует от абстрактного класса BaseController, добавив следующий метод тестирования:
Метод ConfigureContainer в классе Startup регистрирует интерфейс и задаёт вход атрибута контроллера, код выглядит следующим образом:
Постарайтесь посетить:Вход по гиперссылке виден.
Исключение NullReferenceException цитируется в пустом сообщении, как показано на следующем рисунке:
NullReferenceException: Object reference not set to an instance of an object.
ПеревалКонструктор вводится в интерфейс ITest, его метод вызывается, тест проходит, и его можно вызвать нормально。
Причины аномалий
Реализация контроллера более особенная: контроллер по умолчанию не разрешает и активирует через собственный контейнер, им управляет сам MVC, но Microsoft предоставляет следующий метод:
Вы можете заставить контроллер использовать отдельный контейнер, вызвав метод AddControllersAsServices(), основной исходный код которого выглядит следующим образом:
Метод ConfigureServices в стандартном объекте Startup настроен следующим образом:
Мы модифицируем его так:
Или:
Исходный код ServiceBasedControllerActivator следующий:
После настройки загрузите контроллер напрямую из DI-контейнера, контроллер разберёт сервис из Autofac, и вступит в силу инъекция свойств, которую мы настроили. Как показано ниже:
Наконец, прикрепляется исходный код asp.net ядра:
Вход по гиперссылке виден.
(Конец)
|