¿Cómo hacer que el DataBinder / SmartDispatcherController de Castle MonoRail se una a los tipos que contienen propiedades que son interfaces?

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

Pregunta

Estamos utilizando interfaces para representar clases de entidad en nuestro modelo de dominio. Tenemos implementaciones concretas de estos en virtud del uso de LinqToSql. Hemos agregado un método de fábrica a cada clase de LinqToSql que nuestra capa de servicio utiliza para crear una instancia de una nueva entidad (nota; a diferencia del atributo DataBind del controlador que lo hace).

La implementación predeterminada de DataBinder de MonoRail ignorará las propiedades definidas como interfaces.

Idealmente, no queremos instanciar nuestras clases de capa de datos en MonoRail; el objetivo de las interfaces es separar estas preocupaciones.

Además, en realidad no queremos crear otro conjunto de clases concretas que no sean de LinqToSql, cuyo único trabajo es traducir entre capas.

Es el final de un realmente largo día aquí; por favor, ¿alguien puede tener piedad y señalarnos las partes de IDataBinder que deberíamos sobrecargar con nuestras propias implementaciones, o insinuar otros enfoques que podríamos intentar? ;-)

¿Fue útil?

Solución

Debería estar mirando IParameterBinder. eche un vistazo a una publicación que he escrito sobre el tema

Otros consejos

Como Ken señaló, su idea podría implementarse con un IParameterBinder personalizado.

Una solución sería usar IOC:

  • resolver una instancia concreta del formulario desde su interfaz
  • luego use IDataBinder para vincular la instancia a los parámetros de solicitud

Otro estaría usando IDictionaryAdapter:

  • generar un proxy dto para su interfaz
  • luego use IDataBinder para vincular la instancia del proxy dto a los parámetros de solicitud

NB: la segunda opción no funcionará si la interfaz:

  • no es público (hum)
  • tiene métodos
  • o eventos
  • o propiedades de solo lectura
  • o propiedades setonly

Por último, no estoy seguro de cuál es el problema de exponer una clase concreta en la firma del controlador.

Yo mismo uso formas concretas en los controladores que implementan la interfaz definida en los servicios de capa de aplicación, me permite tener preocupaciones separadas en ambos lados:

  • el lado del controlador es mapeo Http y validación de datos de primer nivel del formulario / comando
  • servicios de capa de aplicación es validación comercial y procesamiento del formulario / comando
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top