Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 20665|Odpowiedź: 0

[.NET Core] ASP.NET Core wstrzykuje do NullReferenceException atrybut Autofac

[Skopiuj link]
Opublikowano 2020-9-12 20:57:21 | | | |
Autofac to świetny pomysł. Kontenery NET IoC. Zarządza zależnościami między klasami, dzięki czemu aplikacja może być łatwa do modyfikacji wraz ze wzrostem skali i złożoności. Implementuje się go poprzez traktowanie zwykłych klas .NET jako komponentów.
Jestem też stereotypem pojemników Autofac i napisałem wiele artykułów:

Użyj autofac w MVC do implementacji automatycznej rejestracji
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Wykryta zależność komponentu kołowego" rozwiązany
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core wykorzystuje Autofac do implementacji wstrzyknięcia IOC
https://www.itsvse.com/thread-7563-1-1.html

Zakres instancji komponentu autofac
https://www.itsvse.com/thread-5080-1-1.html

Atrybut Mvc Controller Autofac wstrzyknięty do kontrolera
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core dependency injection wykorzystuje dołączony kontener IOC
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core wykorzystuje Autofac do implementacji wstrzyknięcia IOC
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core wykorzystuje Autofac do implementacji przechwytywania AOP
https://www.itsvse.com/thread-7566-1-1.html


Stwórz nowy projekt ASP.NET Core 3.1 i odwołuj się do pakietów związanych z AutoFACiem przez Nuget, w następujący sposób:


Stwórzmy nowy interfejs ITest i implementację, kod wygląda następująco:




Tworząc nowy kontroler klasy bazowej BaseController, a inne kontrolery dziedziczyły klasę abstrakcyjną, dodając właściwość ITest do klasy bazowej, a kod wygląda następująco:

Niech WeatherForecastController odziedziczy klasę abstrakcyjną BaseController, dodając następującą metodę testową:

Metoda ConfigureContainer w klasie Startup rejestruje interfejs i ustawia wejście atrybutu kontrolera, a kod wygląda następująco:

Spróbuj odwiedzić:Logowanie do linku jest widoczne.

Wyjątek NullReferenceException jest cytowany w pustym komunikatie, jak pokazano na poniższym rysunku:



NullReferenceException: Object reference not set to an instance of an object.


PrzełęczKonstruktor jest wstrzyknięty do interfejsu ITest, jego metoda jest wywoływana, test przechodzi i można go wywołać normalnie

Przyczyny anomalii

Implementacja Kontrolera jest bardziej specyficzna, kontroler nie uruchamia domyślnie Resolve&Activate przez własny kontener, jest zarządzany przez MVC, ale Microsoft udostępnia taką metodę:

Możesz sprawić, by kontroler używał własnego kontenera, wywołując metodę AddControllersAsServices(), której główny kod źródłowy jest następujący:



Metoda ConfigureServices w domyślnym obiekcie Startup jest skonfigurowana następująco:

Modyfikujemy go na:

Lub:

Kod źródłowy ServiceBasedControllerActivator przedstawia się następująco:

Po skonfigurowaniu załadujemy kontroler bezpośrednio z kontenera DI, kontroler przeanalizuje usługę z Autofac, a skonfigurowane wstrzykiwanie właściwości zadziała. Jak pokazano poniżej:



Na koniec dołączany jest adres kodu źródłowego asp.net rdzenia:

Logowanie do linku jest widoczne.

(Koniec)





Poprzedni:Hangfire dodaje dane normalnie, ale nadal się uruchamia z powodu wyjątku
Następny:Jak wyświetlić dane Sqlite w zaawansowanych tabelach za pomocą E4A?
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com