Boa tarde, Pessoal!
estou com a dificuldade abaixo, no momento o "pedido" sempre está null.
//Inicio do arquivo PedidoRepository.cs
namespace EstudoMvc.Repository
{
public interface IPedidoRepository
{
Pedido GetPedido();
void AddItem(string codigo);
}
public class PedidoRepository : BaseRepository<Pedido>, IPedidoRepository
{
private readonly IHttpContextAccessor contextAccessor;
public PedidoRepository(ApplicationContext contexto, IHttpContextAccessor contextAccessor) : base(contexto)
{
this.contextAccessor = contextAccessor;
}
public void AddItem(string codigo)
{
var produto = contexto.Set<Produto>().Where(p => p.Codigo == codigo).SingleOrDefault();
if (produto == null)
{
throw new ArgumentException("Produto não encontrado!");
}
var pedido = GetPedido();
var itemPedido = contexto.Set<ItemPedido>().Where(i => i.Produto.Codigo == codigo).SingleOrDefault();
if(itemPedido == null)
{
itemPedido = new ItemPedido(pedido, produto, 1, produto.Preco);
contexto.Set<ItemPedido>().Add(itemPedido);
contexto.SaveChanges();
}
}
public Pedido GetPedido()
{
var pedidoId = GetPedidoId();
var pedido = dbSet
.Where(p => p.Id == pedidoId)
.SingleOrDefault();
if(pedido == null)
{
pedido = new Pedido();
dbSet.Add(pedido);
contexto.SaveChanges();
SetPedidoId(pedido.Id);
}
return pedido;
}
private int? GetPedidoId()
{
return contextAccessor.HttpContext.Session.GetInt32("pedidoId");
}
private void SetPedidoId(int pedidoId)
{
contextAccessor.HttpContext.Session.SetInt32("pedidoId", pedidoId);
}
}
}
// Iniciando arquivo de PedidoController
namespace EstudoMvc.Controllers
{
public class PedidoController : Controller
{
private readonly IProdutoRepository produtoRepository;
private readonly IPedidoRepository pedidoRepository;
public PedidoController(IProdutoRepository produtoRepository, IPedidoRepository pedidoRepository)
{
this.produtoRepository = produtoRepository;
this.pedidoRepository = pedidoRepository;
}
public IActionResult Carrossel()
{
return View(produtoRepository.GetProdutos());
}
public IActionResult Cadastro()
{
return View();
}
public IActionResult Carrinho(string codigo)
{
if (!string.IsNullOrEmpty(codigo))
{
pedidoRepository.AddItem(codigo);
}
Pedido pedido = pedidoRepository.GetPedido();
return View(pedido.Itens);
}
public IActionResult Resumo()
{
return View();
}
}
}
//Inicio do arquivo Startup
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession();
string connectionString = Configuration.GetConnectionString("Default");
services.AddDbContext<ApplicationContext>(options => options.UseSqlServer(connectionString));
services.AddTransient<IDataService, DataService>();
services.AddTransient<IProdutoRepository, ProdutoRepository>();
services.AddTransient<ICadastroRepository, CadastroRepository>();
services.AddTransient<IItemPedidoRepository, ItemPedidoRepository>();
services.AddTransient<IPedidoRepository, PedidoRepository>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Pedido}/{action=Carrossel}/{codigo?}");
});