Oi Alberto, tudo bem?
Uma instância transitória, ou temporária (transient) é criada cada vez que é solicitada pelo contêiner de serviço. Esse tempo de vida funciona melhor para serviços leves e sem estado.
Uma instância com tempo de vida Transient criada por injeção de dependência...
public class MinhaClasse
{
private readonly RepositorioBaseEF<Livro> repositorioLivro;
public MinhaClasse(IRepository<Livro> repositorioLivro)
{
this.repositorioLivro = repositorioLivro;
}
}
... equivale a criar uma instância no construtor de MinhaClasse
, algo como:
public class MinhaClasse
{
private readonly RepositorioBaseEF<Livro> repositorioLivro;
public MinhaClasse()
{
this.repositorioLivro = new RepositorioBaseEF<Livro> repositorioLivro();
}
}
Ou seja, a instância repositorioLivro acima será criada tantas vezes quanto uma instância de MinhaClasse
. Exemplo: Um código (cliente) JavaScript faz uma requisição HTTP GET para um serviço ASP.NET Core, que por sua vez cria MinhaClasse
5 vezes. Nesse caso, serão criadas 5 instâncias de RepositorioBaseEF<Livro>
, que serão descartadas quando as 5 instâncias de MinhaClasse
também forem descartadas.
É claro que existe um "overhead" (custo) de criar uma instância de RepositorioBaseEF<Livro>
. Se você quiser diminuir esse custo de construção, pode criar a instância registrando "por escopo". Exemplo: Um código (cliente) JavaScript faz uma requisição HTTP GET para um serviço ASP.NET Core, que por sua vez cria MinhaClasse
5 vezes. Nesse caso, será criada apenas 1 instância de RepositorioBaseEF<Livro>
, que será descartada quando as 5 instâncias de MinhaClasse
também forem descartadas:
services.AddScoped<IRepository<Livro>, RepositorioBaseEF<Livro>>();
Outra opção é usar registrar a injeção de dependência para criar uma única instância "singleton" que existirá durante todo o tempo de vida da aplicação. Exemplo: 15 clientes JavaScript fazem várias requisições HTTP GET para um serviço ASP.NET Core, que por sua vez criam instâncias de MinhaClasse
125 vezes no total. Nesse caso, será criada apenas 1 instância de RepositorioBaseEF<Livro>
, que será descartada quando todas 125 instâncias de MinhaClasse
também forem descartadas:
services.AddSingleton<IRepository<Livro>, new RepositorioBaseEF<Livro>()>();
Para maiores informações, consulte: [# Injeção de dependência no ASP.NET Core](https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2)