referência circular entre Assembléias em C # e Visual Studio 2005 (Mais uma vez ...)
-
06-09-2019 - |
Pergunta
Por favor, leia primeiro da seguinte discussão:
referência circular entre Assembléias em C # e Visual Studio 2005
interfaces de execução é resolver o meu problema, mas não cumprindo o meu alvo.
O meu objectivo é trabalhar apenas com BO-layer / montagem da camada UI / Assembly. Para que possa manter uma referência limpo camada-a-camada.
Porque eu não quero uma referência a ser adicionado tanto para BO-layer / montagem e ORMapper-layer / montagem na camada UI / montagem.
Eu só quero trabalhar com BO-layer / montagem de dentro UI-layer / montagem.
Enquanto isso, alguém me sugeriu que, ele só pode ser possível com o uso de reflexão, não DI. Isso é verdade?
Solução
Se você realmente insistir em esconder a camada ORM por trás sua camada BO, então Dependency Injection deve ainda ser capaz de ajudá-lo. Note que você não será capaz de ficar longe de referência a biblioteca DI de seu segmento interface do usuário, porém, porque isso vai ser onde seus objetos de negócios virá de seguida.
Abordagem:
- Criar uma interface que contém métodos para carregar os dados para objetos
User
populate - implementar essa interface em seu projeto ORM
- No arranque, cadastre-se a implementação ORM contra a interface usando um recipiente DI de algum tipo (leia os detalhes em qualquer biblioteca de DI que você usa, por exemplo: www.ninject.org por algo leve)
- Dar o objeto
User
um construtor que leva uma instância da interface população a carregar dados de
Então, quando você precisa de um objeto User
, você pergunta a biblioteca DI para criá-lo, ea biblioteca DI vai construir o User
e dar-lhe uma referência para a implementação ORM. Você vai ter que injetar algumas propriedades para a chamada DI, bem como para o 'username' e 'password' para ser capaz de preenchê-lo completamente com os valores.
Note que este não é exatamente o DI foi inventado para ... código do aplicativo é realmente deveria lidar com ORM diretamente para criar / ler / atualizar / excluir objetos de negócios.