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?
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?
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!