Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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 Core (2) Перезапустить приложение по коду
https://www.itsvse.com/thread-9480-1-1.html

Обычно инстанцированный объект — это инстанция класса с новым ключевым словом

C# динамически создаёт экземпляр класса в фабрике классов с помощью следующих методов:


Activator.CreateInstance (Type)
Activator.CreateInstance (Type, Object[])


Сначала определяем интерфейс ITest следующим образом:

Определим два класса реализации: TestA и TestB, и код выглядит следующим образом:

где TestB имеет непустой конструктор

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

Конфигурационный файл выглядит следующим образом:



Мы создаём объекты с помощью динамической загрузки dll, их отражения и создания их через Activator и ActivatorUtilities соответственно, используя следующий код:

Результаты возврата:

ret
«Привет, itsvse.com»
Бывший. Сообщение
«Для типа 'ClassLibrary1.TestB' не определен конструктор без параметров.»

ret
«Привет, itsvse.com»
ret
«Аааа itsvse.com»

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

Создание TestA и TestB через ActivatorUtilities не сообщает об ошибке, и метод может выполняться нормально, как показано ниже:




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

Где _services статические переменные определяются следующим образом:

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

Поставщик
IServiceProvider
Провайдер услуг для разрешения зависимостей

экземплярТип
Тип
Тип для активации

параметры
Цель[]
Параметры конструктора, которые не предоставляются поставщиком


Ссылка:Вход по гиперссылке виден.

(Конец)




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

Mail To:help@itsvse.com