Como chegar do Castelo MonoRail DataBinder / SmartDispatcherController para vincular contra os tipos que contêm propriedades que são interfaces?
-
08-07-2019 - |
Pergunta
Estamos usando interfaces para representar classes de entidade em nosso modelo de domínio. Temos implementações concretas destes em virtude da utilização LinqToSql. Nós adicionamos um método de fábrica para cada classe LinqToSql que nossos usos camada de serviço para instanciar uma nova entidade (nota; ao contrário do atributo DataBind do controlador de fazê-lo).
implementação DataBinder padrão do MonoRail irá ignorar propriedades que são definidas como interfaces.
O ideal é que nós não queremos instanciar nossas classes de camada de dados no MonoRail - todo o ponto das interfaces é separar estas preocupações.
Além disso, nós não realmente deseja criar um outro conjunto de classes concretas não LinqToSql cuja única função é traduzir entre as camadas.
É o fim de um realmente o dia aqui; Por favor, alguém pode ter misericórdia e nos apontam para as partes de IDataBinder que devemos sobrecarregar com as nossas próprias implementações, ou alusão a outras abordagens que podem tentar? ; -)
Solução
Você deve estar olhando para IParameterBinder. dar uma olhada em um post que escrevi sobre o assunto
Outras dicas
Como Ken apontou, sua idéia pode ser implementada com uma IParameterBinder personalizado.
Uma solução seria usar COI:
- instância determinação concreta da forma de sua interface
- em seguida, usar IDataBinder para ligar a instância para os parâmetros de solicitação
Outra estaria usando IDictionaryAdapter:
- gerar um proxy dto para sua interface
- em seguida, usar IDataBinder para ligar a instância do proxy dto ao pedido params
NB: segunda opção não funcionará se a interface:
- não é pública (hum)
- tem métodos
- ou eventos
- ou somente leitura propriedades
- ou setonly propriedades
Última, eu tenho certeza de qual é o problema expondo classe concreta na assinatura do controlador.
Eu mesmo uso forma concreta em controladores de execução interface definida em serviços de camada de aplicação, que me permite ter preocupações separados em ambos os lados:
- lado controlador é http mapeamento e validação de dados primeiro nível de forma a / comando
- Serviços de camada de aplicação é a validação de negócios e processamento da forma / command