¿Cómo hacer que el DataBinder / SmartDispatcherController de Castle MonoRail se una a los tipos que contienen propiedades que son interfaces?
-
08-07-2019 - |
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? ;-)
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