|
|
Zveřejněno 12. 9. 2020 20:57:21
|
|
|
|

Autofac je skvělý. NET IoC kontejnery. Spravuje závislosti mezi třídami, takže aplikace může být stále snadno upravována s rostoucím rozsahem a složitostí. Implementuje se tak, že běžné .NET třídy jsou považovány za komponenty. Jsem také klišé ohledně kontejnerů Autofac a napsal jsem spoustu článků:
Vytvořte nový projekt ASP.NET Core 3.1 a odkazujte na balíčky související s AutoFACem prostřednictvím Nugetu, a to následovně:
Vytvoříme nové ITest rozhraní a implementaci, kód je následující:
Vytvořte nový řadič základní třídy BaseController, ostatní řadiče zdědí abstraktní třídu, přidají vlastnost ITest k základní třídě a kód je následující:
Nechť WeatherForecastController zdědí abstraktní třídu BaseController, přičemž přidá následující testovací metodu:
Metoda ConfigureContainer ve třídě Startup registruje rozhraní a nastavuje vstup atributu kontroleru, kód je následující:
Zkuste navštívit:Přihlášení k hypertextovému odkazu je viditelné.
NullReferenceException je uvedena v prázdné zprávě, jak je znázorněno na následujícím obrázku:
NullReferenceException: Object reference not set to an instance of an object.
PrůsmykKonstruktor je vstrčen do rozhraní ITest, jeho metoda je zavolána, test projde a lze jej volat normálně。
Příčiny anomálií
Implementace Controlleru je speciálnější, Controller neprovádí Resolve&Activate ve výchozím nastavení přes vlastní kontejner, je spravován samotným MVC, ale Microsoft poskytuje tuto metodu:
Můžete nastavit, aby Controller používal vlastní kontejner voláním metody AddControllersAsServices(), jejíž hlavní zdrojový kód je následující:
Metoda ConfigureServices ve výchozím objektu Startup je nakonfigurována následovně:
Upravujeme ho na:
Nebo:
Zdrojový kód ServiceBasedControllerActivator je následující:
Po nastavení načte řadič přímo z DI kontejneru, kontroler provede analýzu služby z Autofac a nakonfigurovaná injekce vlastností začne fungovat. Jak je uvedeno níže:
Nakonec je připojena adresa zdrojového kódu asp.net jádra:
Přihlášení k hypertextovému odkazu je viditelné.
(Konec)
|
Předchozí:Hangfire přidává data normálně, ale kvůli té výjimce se stále spouštíDalší:Jak zobrazit data Sqlite v pokročilých tabulkách pomocí E4A?
|