Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 36608|Resposta: 1

[.NET Core] ASP.NET Core (iii) Criar instâncias dinamicamente usando ActivatorUtilities

[Copiar link]
Publicado em 01/12/2020 13:50:31 | | | |
Revisar:

ASP.NET Core (1) usa cache Redis
https://www.itsvse.com/thread-9393-1-1.html

ASP.NET Núcleo (2) Reiniciar a aplicação por código
https://www.itsvse.com/thread-9480-1-1.html

Normalmente, um objeto instanciado é uma instância de uma classe com a nova palavra-chave

C# cria dinamicamente uma instância de uma classe na fábrica de classes usando os seguintes métodos:


Ativador.CreateInstance (Tipo)
Activator.CreateInstance (Tipo, Objeto[])


Primeiro, definimos uma interface ITest da seguinte forma:

Defina duas classes de implementação, a saber: TestA e TestB, e o código é o seguinte:

onde TestB possui um construtor não vazio

O método GetUserName na classe TestB precisa ler o arquivo de configuração através do IConfiguration e então uni-lo aos parâmetros de entrada para devolver o valor de retorno.

O arquivo de configuração é o seguinte:



Criamos objetos carregando dinamicamente a DLL, criando-os por reflexão e instanciando-os por meio do Activator e ActivatorUtilities, respectivamente, com o seguinte código:

Resultados do retorno:

ret
"Olá, itsvse.com"
ex. Mensagem
"Nenhum construtor sem parâmetros definido para o tipo 'ClassLibrary1.TestB'."

ret
"Olá, itsvse.com"
ret
"aaaa itsvse.com"

Ao usar o Ativador para criar um objeto TestB, um erro é reportado:Nenhum construtor sem parâmetros definido para o tipo 'ClassLibrary1.TestB'.

Criar TestA e TestB através do ActivatorUtilities não reportará erro, e o método pode ser executado normalmente, conforme mostrado abaixo:




Não há problema em usar o Activator para instanciar objetos no framework .NET, mas em asp.net núcleo, os conceitos de IOC e DI são introduzidos, e muitos objetos não são construtores sem parâmetros e precisam ser passados na classe de implementação correspondente.

Onde _services variáveis estáticas são definidas da seguinte forma:

CreateInstance(IServiceProvider, Type, Object[])
parâmetro

Provedor
IServiceProvider
Provedor de serviço para resolver dependências

instanceType
Tipo
O tipo a ser ativado

Parâmetros
Objeto[]
Parâmetros do construtor que não são fornecidos pelo provedor


Referência:O login do hiperlink está visível.

(Fim)




Anterior:Análise de segurança OAuth 2.0 para dispositivos móveis e desktops e mecanismo do CodeVerifier
Próximo:Use o JSC para gerar uma dll em JavaScript para chamadas em C#
Publicado em 22/09/2021 20:31:33 |
Aprenda a aprender...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com