Como chegar do Castelo MonoRail DataBinder / SmartDispatcherController para vincular contra os tipos que contêm propriedades que são interfaces?

StackOverflow https://stackoverflow.com/questions/306103

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? ; -)

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top