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

Изглед: 36608|Отговор: 1

[.NET Core] ASP.NET Ядро (iii) Динамично създаване на инстанции чрез ActivatorUtilities

[Копирай линк]
Публикувано в 1.12.2020 г. 13:50:31 ч. | | | |
Преглед:

ASP.NET Core (1) използва кеширане на Redis
https://www.itsvse.com/thread-9393-1-1.html

ASP.NET Ядро (2) Рестартиране на приложението чрез код
https://www.itsvse.com/thread-9480-1-1.html

Обикновено инстанцираният обект е инстанция на клас с новата ключова дума

C# динамично създава екземпляр на клас във фабриката за класове чрез следните методи:


Activator.CreateInstance (тип)
Activator.CreateInstance (Тип, Обект[])


Първо, дефинираме интерфейс на ITest по следния начин:

Дефинирайте два класа за имплементация, а именно: TestA и TestB, и кодът е следният:

където TestB има непразен конструктор

Методът GetUserName в класа TestB трябва да прочете конфигурационния файл чрез IConfiguration и след това да го съчетае с входящите параметри, за да върне връщаната стойност.

Конфигурационният файл е следният:



Създаваме обекти чрез динамично зареждане на dll, създаване им чрез отражение и инстанциране чрез Activator и ActivatorUtilities съответно, със следния код:

Резултати от връщането:

отстъпи
"Здравей, itsvse.com"
Бивши. Съобщение
"Няма дефиниран конструктор без параметри за тип 'ClassLibrary1.TestB'."

отстъпи
"Здравей, itsvse.com"
отстъпи
"аааа itsvse.com"

При използване на Activator за създаване на TestB обект се докладва грешка:Няма дефиниран конструктор без параметри за тип 'ClassLibrary1.TestB'.

Създаването на TestA и TestB чрез ActivatorUtilities няма да докладва грешка и методът може да се изпълни нормално, както е показано по-долу:




Няма проблем при използването на Activator за инстанциране на обекти в .NET фреймуърка, но в asp.net ядро се въвеждат концепциите IOC и DI, а много обекти не са конструктори без параметри и трябва да се предават в съответния клас на имплементация.

Където _services статични променливи са дефинирани по следния начин:

CreateInstance(IServiceProvider, Type, Object[])
параметър

Доставчик
IServiceProvider
Доставчик на услуги за разрешаване на зависимости

instanceТип
Тип
Типът за активиране

параметри
Обект[]
Параметри на конструктора, които не са предоставени от доставчика


Препратка:Входът към хиперлинк е видим.

(Край)




Предишен:Анализ на сигурността на мобилни и десктоп OAuth 2.0 и механизъм CodeVerifier
Следващ:Използвайте JSC за генериране на dll в JavaScript за C# извиквания
Публикувано в 22.09.2021 г. 20:31:33 ч. |
Научи се да учиш...
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com