Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 20665|Ответ: 0

[.NET Core] ASP.NET Core внедряет NullReferenceException с атрибутом Autofac

[Скопировать ссылку]
Опубликовано 2020-9-12 20:57:21 | | | |
Autofac — это отличный вариант. NET IoC контейнеры. Он управляет зависимостями между классами, чтобы приложение можно было легко модифицировать по мере увеличения масштаба и сложности. Он реализуется путём рассмотрения обычных .NET-классов как компонентов.
Я также клише по поводу контейнеров Autofac и написал много статей:

Используйте autofac в MVC для реализации автоматической регистрации
https://www.itsvse.com/thread-8993-1-1.html

Ошибка Autofac «Обнаружена зависимость от кругового компонента» устранена
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core использует Autofac для реализации инжекции IOC
https://www.itsvse.com/thread-7563-1-1.html

Область действия экземпляра компонента autofac
https://www.itsvse.com/thread-5080-1-1.html

атрибут mvc Controller Autofac, внедрённый в контроллер
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Инъекция зависимостей ядра использует контейнер IOC, который идёт в комплекте
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core использует Autofac для реализации инжекции IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core использует Autofac для реализации перехвата AOP
https://www.itsvse.com/thread-7566-1-1.html


Создайте новый проект 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 ядра:

Вход по гиперссылке виден.

(Конец)





Предыдущий:Hangfire добавляет данные обычно, но продолжает выполняться из-за исключения
Следующий:Как отображать данные Sqlite в расширенных таблицах с помощью E4A?
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com