Nesta parte das aulas quando tento adicionar um produto ao carrinho ele passa que contextAcessor "está vazio"?! exatamente no método (?!) GetPedidoId
public int? GetPedidoId()
{
return contextAcessor.HttpContext.Session.GetInt32("pedidoId");
}
código completo do PedidoRepository.cs
using System;
using System.Linq;
using CasaDoCodigo.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
namespace CasaDoCodigo.Repositories
{
public interface IPedidoRepository
{
Pedido GetPedido();
void AddItem(string codigo);
}
public class PedidoRepository : BaseRepository<Pedido>, IPedidoRepository
{
private readonly IHttpContextAccessor contextAcessor;
public PedidoRepository(ApplicationContext contexto, IHttpContextAccessor contextAccessor) : base(contexto)
{
this.contextAcessor = contextAcessor;
}
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
&& i.Pedido.Id == pedido.Id)
.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
.Include(p => p.Itens)
.ThenInclude(i => i.Produto)
.Where(p => p.Id == pedidoId)
.SingleOrDefault();
if (pedido == null)
{
pedido = new Pedido();
dbSet.Add(pedido);
contexto.SaveChanges();
SetPedidoId(pedido.Id);
}
return pedido;
}
public int? GetPedidoId()
{
return contextAcessor.HttpContext.Session.GetInt32("pedidoId");
}
private void SetPedidoId(int pedidoId)
{
contextAcessor.HttpContext.Session.SetInt32("pedidoId", pedidoId);
}
}
}
Se alguém puder me explicar/mostrar o que fiz de errado?! =P