Revisar:
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)
|