Olá!
Estou com problemas em realizar a importação dos produtos. Tentei seguir alguns passos conforme a dúvidas neste fórum mas não consegui.
Quando executo o projeto ocorre o seguinte erro: System.InvalidOperationException: 'Unable to resolve service for type 'CasaDoCodigo.Repositories.ICategoriaRepository' while attempting to activate 'CasaDoCodigo.Repositories.ProdutoRepository'.'
Meu fonte estão da seguinte maneira.
Classe ProdutoRepository.cs
using CasaDoCodigo.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CasaDoCodigo.Repositories
{
public class ProdutoRepository : BaseRepository<Produto>, IProdutoRepository
{
private readonly ICategoriaRepository categoriaRepository;
public ProdutoRepository(ApplicationContext contexto, ICategoriaRepository categoriaRepository) : base(contexto)
{
this.categoriaRepository = categoriaRepository;
}
public IList<Produto> GetProdutos()
{
return dbSet.ToList();
}
public async Task SaveProdutos(List<Livro> livros)
{
foreach (var livro in livros)
{
if (!dbSet.Where(p => p.Codigo == livro.Codigo).Any())
{
Categoria categoria = await categoriaRepository.NovaCategoria(livro.Categoria); //vai criar se necessário
dbSet.Add(new Produto(livro.Codigo, livro.Nome, livro.Preco, categoria));
}
}
await contexto.SaveChangesAsync();
}
}
public class Livro
{
public string Codigo { get; set; }
public string Nome { get; set; }
public string Categoria { get; set; }
public string Subcategoria { get; set; }
public decimal Preco { get; set; }
}
}
Classe CategoriaRepository.cs
using CasaDoCodigo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CasaDoCodigo.Repositories
{
public interface ICategoriaRepository
{
Task<Categoria> NovaCategoria(string nome);
}
public class CategoriaRepository : BaseRepository<Categoria>, ICategoriaRepository
{
public CategoriaRepository(ApplicationContext contexto) : base(contexto)
{
}
public async Task<Categoria> NovaCategoria(string nome)
{
var categoriaDB = dbSet
.Where(c => c.Nome == nome)
.SingleOrDefault();
if (categoriaDB == null)
{
var novaCategoria = new Categoria()
{
Nome = nome
};
categoriaDB = dbSet.Add(novaCategoria).Entity;
}
await contexto.SaveChangesAsync();
return categoriaDB;
}
}
}
Se preferir segue o projeto no github: https://github.com/cavalsilva/AluraNetJunior
Obrigado desde já.
Abraço.