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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top