Как заставить DataBinder/SmartDispatcherController Castle MonoRail привязываться к типам, содержащим свойства, которые являются интерфейсами?

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

Вопрос

Мы используем интерфейсы для представления классов сущностей в нашей модели предметной области.У нас есть конкретные реализации этих возможностей благодаря использованию LinqToSql.Мы добавили фабричный метод в каждый класс LinqToSql, который наш сервисный уровень использует для создания экземпляра нового объекта (примечание:в отличие от атрибута DataBind контроллера, который делает это).

Реализация DataBinder по умолчанию в MonoRail будет игнорировать свойства, определенные как интерфейсы.

В идеале мы не хотим создавать экземпляры наших классов уровня данных в MonoRail — вся суть интерфейсов в том, чтобы разделить эти задачи.

Кроме того, мы на самом деле не хотим создавать еще один набор конкретных классов, отличных от LinqToSql, единственная задача которых — перевод между уровнями.

Это конец Действительно долгий день здесь;пожалуйста, может ли кто-нибудь проявить милосердие и указать нам на части IDataBinder, которые нам следует перегрузить нашими собственными реализациями, или намекнуть на другие подходы, которые мы могли бы попробовать?;-)

Это было полезно?

Решение

Вы должны смотреть на IParameterBinder. взгляните на пост, который я написал на эту тему

Другие советы

Как отметил Кен, вашу идею можно реализовать с помощью специального IParameterBinder.

Решением было бы использовать IOC:

  • разрешить конкретный экземпляр формы из ее интерфейса
  • затем используйте IDataBinder для привязки экземпляра к параметрам запроса

Другой вариант будет использовать IDictionaryAdapter:

  • создать прокси-сервер dto для вашего интерфейса
  • затем используйте IDataBinder для привязки экземпляра прокси-сервера dto к параметрам запроса.

Примечание:второй вариант не будет работать, если интерфейс:

  • не публично (хм)
  • имеет методы
  • или события
  • или свойства только для чтения
  • или установить только свойства

Наконец, я не уверен, в чем проблема с раскрытием конкретного класса в сигнатуре контроллера.

Я сам использую конкретную форму в контроллерах, реализующих интерфейс, определенный в службах прикладного уровня, это позволяет мне разделить проблемы с обеих сторон:

  • сторона контроллера — это HTTP-сопоставление и проверка данных первого уровня формы/команды.
  • услуги прикладного уровня — это бизнес-проверка и обработка формы/команды.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top