Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 36608|Відповідь: 1

[.NET Core] ASP.NET Ядро (iii) Динамічно створювати екземпляри за допомогою ActivatorUtilities

[Копіювати посилання]
Опубліковано 01.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 (Type, Object[])


Спочатку визначаємо інтерфейс ITest наступним чином:

Визначимо два класи реалізації, а саме: TestA і TestB, і код виглядає так:

де TestB має непорожній конструктор

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

Конфігураційний файл виглядає так:



Ми створюємо об'єкти, динамічно завантажуючи dll, створюючи їх шляхом відбиття та інстанціюючи їх через Activator і ActivatorUtilities відповідно, використовуючи наступний код:

Результати повернення:

ret
"Привіт, itsvse.com"
Ex. Повідомлення
"Для типу 'ClassLibrary1.TestB' не визначено конструктор без параметрів."

ret
"Привіт, itsvse.com"
ret
"Аааа itsvse.com"

При використанні Activator для створення об'єкта TestB повідомляється про помилку:Для типу 'ClassLibrary1.TestB' не визначено конструктор без параметрів.

Створення TestA та TestB через ActivatorUtilities не повідомляє про помилку, і метод можна виконувати звичайним способом, як показано нижче:




Немає проблем із використанням Activator для інстанції об'єктів у .NET-фреймворку, але в asp.net core вводяться поняття IOC і DI, і багато об'єктів не є конструкторами без параметрів і їх потрібно передавати у відповідний клас реалізації.

Де _services статичних змінних визначено наступним чином:

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

Постачальник
IServiceProvider
Провайдер послуг для вирішення залежностей

instanceType
Тип
Тип для активації

параметри
Об'єкт[]
Параметри конструктора, які не надаються провайдером


Посилання:Вхід за гіперпосиланням видно.

(Кінець)




Попередній:Мобільний та десктопний аналіз безпеки OAuth 2.0 та механізм CodeVerifier
Наступний:Використовуйте JSC для генерації dll у JavaScript для викликів C#
Опубліковано 22.09.2021 20:31:33 |
Навчися вчитися...
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com