Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 Core dependency injection използва 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