Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Problema Aula 02 Crud - Exercicio 11 - Removendo Produtos

public class ProdutosController
{
    public ActionResult Remove(int id)
    {
        ProdutosDAO dao = new ProdutosDAO(contexto);// Como voceis conseguiram buscar o contexto que é Privado na classe ProdutosDAO ??
        Produto produto = dao.BuscaPorId(id);
        dao.Remove(produto);
        return RedirectToAction("Index");
    }
}

Pessoal essa é a resposta para o exercício do remover da classe de ProdutosController , mas estou com uma dúvida . Pois no ProdutosDAO dao = new ProdutosDAO(contexto) -> esse contexto existe com privado na classe ProdutosDAO , como voces conseguirem utilizar ele . No meu claro ele diz que o contexto não existe neste contexto kk (redundante) .

3 respostas
solução

Oi Hugo. Se você colocou o contexto como atributo da ProdutosDAO e fez um construtor que recebe esse contexto como argumento, você não precisa mais escrever essa linha instanciando um objeto ProdutosDAO dentro da classe controller. A sua classe ProdutosDAO deve estar assim:

    public class ProdutosDAO
    {
        private EntidadesContext contexto;

        public ProdutosDAO(EntidadesContext contexto)
        {
            this.contexto = contexto;
        }

        public void Remove(Produto produto)
        {
            this.contexto.Produtos.Remove(produto);
        }

        //restante da classe

E a sua classe ProdutosController deve estar assim:

    public class ProdutosController : Controller
    {

        private ProdutosDAO dao;

        public ProdutosController(ProdutosDAO dao) {
            this.dao = dao;
        }

        public ActionResult Remove(int id)
        {
            //sem instanciar um ProdutoDAO
            Produto produto = dao.BuscaPorId(id);
            dao.Remove(produto);
            return RedirectToAction("Index");
        }

        //restante da classe

Entretanto, você deve providenciar no arquivo App_Start/NinjectWebCommon.cs que a dependência do argumento contexto na ProdutosDAO seja injetada automaticamente:

        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<EntidadesContext>().ToSelf().InRequestScope();
            kernel.BindFilter<SaveChangesFilter>(System.Web.Mvc.FilterScope.Global, 1);
        }

Oi Hugo

A sua dúvida foi resolvida?

Beleza foi sim muito Obrigado !

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