Olá, estou fazendo um projeto meu e estou com dificuldades quanto a Injeção de Dependência.
Na minha Solution, existem 3 projetos separados:
1 - projeto Web (front-end MVC) 2 - aplicacao (responsável pelas regras de negócio) 3 - dominio (contém as classes do projeto (pessoa, produto, etc)) 4 - dados (responsável pela comunicação com o banco de dados através do Entity Framework)
Minha intenção é fazer com que o controller receba uma requisição para adicionar um novo produto por exemplo... Então o ProdutoController (projeto 1) chama o ProdutoAplicacao (projeto 2) e passa um objeto da classe Produto para essa aplicacao. A classe ProdutoAplicacao vai então fazer o que tem de fazer e chamar a classe ProdutoRepositorio (projeto 4) para salvar no banco de dados.
Ai entra a injeção de dependência... Como posso fazer ela? Alguém pode me ajudar detalhadamente, por favor?
Eu consigo fazer funcionar, se na classe que estou eu fizer uma instância da classe para onde quero ir... Mas isso gera um alto acoplamento entre classes, o que não é certo, apesar de funcionar...
Obrigado
EDIT:
dando uma pesquisada, eu fiz da seguinte forma, mas não acho que esteja correto:
usando o Ninject. Eu criei 2 interfaces, uma para a aplicacao e ourta para o repositorio. Então fiz com que o UsuarioController tinha o seguinte construtor (projeto 1):
private IAplicacaoBase<Usuario> _usuarioAplicacao;
public UsuarioController (IAplicacaoBase<Usuario> usuarioAplicacao)
{
this._usuarioAplicacao = usuarioAplicacao;
}
o construtor da UsuarioAplicacao (projeto 2):
private readonly IRepositorioBase<Usuario> _usuarioRepositorio;
public UsuarioAplicacao (IRepositorioBase<Usuario> usuarioRepositorio)
{
this._usuarioRepositorio = usuarioRepositorio;
}
e o construtor da UsuarioRepositorio (projeto 4):
private readonly Contexto _contexto;
public UsuarioRepositorio(Contexto contexto)
{
this._contexto = contexto;
}
com o Ninject instalado no projeto Web (1), eu adicionei la o que era necessario para ele gerenciar as dependências, porém na hora de adicionar o kernel.Bind().To()
eu não consegui, por que o projeto 1 não tem referência para o projeto 4 (pq o front-end não deve ver a camada de banco de dados)