none
Interface RRS feed

  • Pergunta

  • Galera preciso criar um Interface da minha controller para injeção de dependencia. Porem meu projeto já está pronto e minhas controllers herdam da BaseController. Como não posso criar herança multipla não estou sabendo como fazer para minha controller herdar uma Interface.

    Tem alguma maneira de fazer isso sem ter que refatorar minha controller ?

    Obrigado


    SirSmart

    sábado, 8 de agosto de 2015 16:18

Respostas

  • Boa noite!

    Injeção de dependência não se trata de herdar classe, pois ao herdar uma classe você já criou uma dependência do objeto x para o objeto y.

    O seu Controller deve receber uma interface no construtor, desta forma você não terá uma dependência do objeto x, ao contrário vai poder receber o objeto x, y e z desde os mesmo tenho implementado o seu contrato (interface).

    Segue abaixo uma exemplo:

    Hoje sua Controller deve estar parecida com esta

    public class PessoaController : BaseController
    {
        public ActionResult Index()
        {
            var pessoaRepositorio = new PessoaRepository();
            var pessoas = pessoaRepositorio.ObterTodos();
            return View(pessoas);
        }
    }

     A ideia é transformá-la nisso:

    public class PessoaController : BaseController
    {
        private IPessoaRepository pessoaRepositorio;
        public PessoaController(IPessoaRepository pessoaRepositorio)
        {
           pessoaRepositorio = pessoaRepositorio;
        }
            public ActionResult Index()
        {
            var pessoas = pessoaRepositorio.ObterTodos();
            return View(pessoas);
        }
    }

    Caso os ActionResult estejam na BaseController, você pode alterar o construtor da BaseController para receber injeção de dependência:

    public class BaseController
    {
        private IPessoaRepository pessoaRepositorio;
        public BaseController(IPessoaRepository pessoaRepositorio)
        {
          pessoaRepositorio = pessoaRepositorio;
        }
            public ActionResult Index()
        {
            var pessoas = pessoaRepositorio.ObterTodos();
            return View(pessoas);
        }
    }
    
    public class PessoaController : BaseController
    {
        public PessoaController(IPessoaRepository pessoaRepositorio):base(pessoaRepositorio)
        {
           
        }
    }


    Att,
    Leandro

    Se foi útil, marque como útil ou como resposta.

    • Sugerido como Resposta Leandro Tozetto sábado, 22 de agosto de 2015 03:24
    • Marcado como Resposta SirSmart segunda-feira, 24 de agosto de 2015 12:54
    sábado, 22 de agosto de 2015 03:24