No novo ASP.NET Core, um grande número de injeções de dependência é usado para escrever código.
Por exemplo, em nossa aula de Startup, podemos ver o seguinte:
O AddMvc AddDbContext inclui o AddDirectoryBrowser que usávamos para tours de diretórios antes:
Todos são frameworks que oferecem bons serviços, e podemos usá-los diretamente ao injetá-los.
Inversão de Controle (IoC) é um princípio de design em programação orientada a objetos que pode ser usado para reduzir o acoplamento entre códigos de computador. O método mais comum é chamado de Injeção de Dependências (DI), e também existe um método chamado "Consulta de Dependências". Ao controlar a inversão, quando um objeto é criado, uma entidade externa que controla todos os objetos do sistema lhe repassa uma referência ao objeto do qual depende. Também pode-se dizer que dependências são injetadas no objeto. Para usar o ioc, a classe Startup precisa referenciar Microsoft.Extensions.DependencyInjection(ps), que já é bastante simples: Microsoft... Expandir... Injeção de dependência - - ,)
Injetar o ciclo de vida de um serviço
A Microsoft oferece 3 ciclos de vida para serviços auto-injetados.
Transitório
Um serviço instantâneo de ciclo de vida que é criado toda vez que é solicitado. Esse ciclo de vida é mais adequado para serviços leves e sem estado.
Escopo
No mesmo escopo, o serviço é criado apenas uma vez por solicitação.
Singleton (Apenas)
O global é criado apenas uma vez, na primeira vez que é solicitado, e então é sempre usado.
Como você usa esses três ciclos de vida? Podemos usar métodos diferentes diretamente ao injetar, o código é o seguinte:
Vamos testar a geração específica desses três ciclos de vida
Escrevemos três interfaces com nomes diferentes e 3 classes distintas para implementar as interfaces, da seguinte forma:
Em cada construtor de classe de implementação, geramos um novo GUID, que nos permite determinar se a classe reexecutou o construtor.
Injetar serviços no controlador
Geralmente existem três formas de injeção: injeção por construtor, injeção por método e injeção de atributo. O próprio container IOC da Microsoft usa injeção de construtores por padrão (A injeção de atributos não é suportada, mas isso pode ser alcançado com substituição de contêiner de terceiros)
Ver código da página:
Execute o projeto e acesse por meio de 2 navegadores diferentes, como mostrado abaixo:
Descobrimos que os GUIDs gerados duas vezes no ciclo de vida instantâneo são inconsistentes, indicando que o objeto não é o mesmo.
No entanto, o ciclo de vida do escopo é o mesmo, pois sob o mesmo escopo, o GUID do serviço usado duas vezes no mesmo navegador é o mesmo, indicando que o mesmo objeto é usado.
No caso de um singleton, dois navegadores diferentes acessam sempre o mesmo GUID, indicando que o mesmo objeto está sendo chamado.
(Fim)
|