|
|
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:
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ątkuNastępny:Jak wyświetlić dane Sqlite w zaawansowanych tabelach za pomocą E4A?
|