Огляд:
Зазвичай інстанційований об'єкт — це інстанція класу з новим ключовим словом
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 Тип Тип для активації
параметри Об'єкт[]
Параметри конструктора, які не надаються провайдером。
Посилання:Вхід за гіперпосиланням видно.
(Кінець)
|