INVERSÃO DE CONTROLE INJE?ÃO DE DEPENDENCIA (IOC)

MRSILVA 22/04/2017 11:52:36
#473493
Olá pessoal.

Estou tentando implementar injeção de controle no meu projeto pesquisei na internet e tem muito material só que muitos deles são para projetos Web e não estou conseguindo fazer no meu projeto Desktop. No meu caso estou utilizando o framework STRUCTURMAP para fazer a injeção de dependência a minha dúvida é como fazer para meus métodos enxergar o mapeamento do STRUCTUREMAP? Exemplo tenho 5 projetos na minha solução como fazer para que esses projetos enxergue os mapeamento, onde eu crio a classe que faz o mapeamento?
Já tentei de varias formas mas estou me esbarrando porque meus métodos não consegue enxergar os mapeamentos.

Alguém pode me dar alguma ajuda se possível algum exemplo.

Desde já agradeço.
JABA 23/04/2017 15:01:41
#473502
Resposta escolhida
Você precisaria referenciar o projeto onde está contido o mapeamento do STRUCTUREMAP para aqueles que você deseja. Mande-nos uma imagem de como está a sua estrutura.
MRSILVA 29/04/2017 12:48:08
#473648
Olá JABA obrigado pelo interesse em me ajudar, desculpe pela demora em dar retorno é porque esses dias foram muito corridos e não tive tempo de me dedicar a programação.
A estrutura da minha solução está da seguinte forma:

São cinco projetos:

1º Entities - Onde ficam minhas classes de domínio;
2º Dal – Onde fica toda comunicação com banco de dados e toda interação com o banco de dados;
3º App - Onde fica a comunicação com a camada de Visualização;
4º View - Onde ficam meus formulários (estou desenvolvendo em WPF)
O referenciamento está assim:
O projeto Entities Não referencia ninguém;
O projeto Dal referencia o projeto Entities;
O projeto App referencia o projeto Entities e Dal;
O projeto View referencia o projeto App.
Será que a arquitetura está errada por isso não consigo implementar StructureMap? Teria que concentrar minhas classes em menos projetos para que minha classe onde fica a StructureMap possa ser enxergada?

Por exemplo:

Para fazer o Mapeamento tive que referenciar os projetos onde tem as interfaces e as classes que implementa as interfaces já que estão em projetos diferentes, mas ao mesmo tempo nas classes onde faço a implementação também tenho que referenciar o projeto onde está o StructureMap para que possa tratar a inversão de controle, mas não é possível referenciar uma classe que já referencia própria classe.

Levando em consideração as boas praticas de programação é errado ter uma solução com único projeto separado por pastas das classes referente as entidades, Repositórios e as classes que controla as interações com usuário (App)? Desta forma acredito que seria mais fácil fazer as inversões de controles.

Desde já agradeço a ajuda.
JABA 29/04/2017 14:38:41
#473649
Cara, ao meu ver, sua estrutura parece correta. A única coisa que eu acrescentaria aí seria uma camada de Serviços para tratar de coisas mais gerais, como é o caso de STRUCTUREMAP. Abaixo alguns sites interessantes sobre o assunto:

social.msdn.microsoft.com/Forums/pt-BR/bda1d98e-363f-4fc6-ae33-0b06ec15bcc1/dvida-sobre-injeo-de-dependncia-em-modelo-03-trs-camadas?forum=arquiteturapt

www.devmedia.com.br/artigo-injecao-de-dependencia-com-structuremap/18464

Citação:

Levando em consideração as boas praticas de programação é errado ter uma solução com único projeto separado por pastas das classes referente as entidades, Repositórios e as classes que controla as interações com usuário (App)?



Não acho que seja errado fazer tudo dentro de um único projeto, desde que você respeite os princípios da arquitetura em camadas. Não é atoa que existem as NameSpaces!
MRSILVA 02/05/2017 00:06:16
#473680
Olá JABA obrigado pela ajuda.

Consegui implementar o StructureMap, só que o mapeamento tive que fazer no meu projeto de visualização (WPF) está funcionando muito bem. Não consegui criar uma camada só para isso e depois referenciar em outros projetos que farão a injeção.

Alguém poderia me apontar o caminho como seria criar uma camada de serviço para tratar StructureMap conforme a sugestão do JABA? Eu tente só que para fazer o mapeamento o projeto onde está o serviço tem que referenciar praticamente todos os projetos para poder enxergar as Interfaces e as classes concretas que serão mapeadas, mas da erro quando vou referenciar o projeto Serviço nas classes onde vou fazer a injeção já que o projeto serviço já referenciou a classe atual. Tentei criar classe estática sem sucesso.


Posso ter problemas futuros no meu projeto pelo fato da minha camada visualização ter referencia do projeto Dal (repositório)?

Desde já agradeço.
Tópico encerrado , respostas não são mais permitidas