Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Por que usar o services.AddTransient?

Nesse caso, qual a diferença entre usar services.AddTransient<IDataService, DataService>(); com injeção de dependência e instanciar diretamente o DataService na classe Startup?

3 respostas
solução!

Oi Victor, tudo bem?

No momento, a classe DataService lê um arquivo chamado livros.json e retorna fornece uma lista pelo método GetLivros().

Imagine, por exemplo, que você quisesse obter a lista inicial de livros não de um arquivo json, mas de uma conexão com um web service de uma universidade, chamada "UniCaelum". Você poderia ter uma outra classe, chamada UnicaelumDataService, implementando a interface IDataService:

    class UniCaelumDataService : IDataService
    {
        public UniCaelum(ApplicationContext contexto,
            IProdutoRepository produtoRepository)
        {
            this.contexto = contexto;
            this.produtoRepository = produtoRepository;
        }

        public async Task InicializaDB()
        {
            await contexto.Database.MigrateAsync();

            List<Livro> livros = await GetLivros();

            await produtoRepository.SaveProdutos(livros);
        }

        private static async Task<List<Livro>> GetLivros()
        {
            //aqui viria o código para obter livros a partir de um webservice da universidade...
        }
    }

Se você está instanciando diretamente o DataService no seu programa, você teria que substituir todas as ocorrências de var service = new DataService()... por var service = new UniCaelumDataService()....

Por outro lado, se você está usando injeção de dependência, basta mudar em Startup.cs esta linha...

services.AddTransient<IDataService, DataService>(); 

por esta:

services.AddTransient<IDataService, UniCaelumDataService>(); 

O que acha?

Entendi, agora fez todo o sentido pra mim.

Muito obrigado pela resposta :)

Excelente, Victor, fico feliz por ter ajudado! E obrigado por participar do fórum!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software