Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 如何获得Castle MonoRail';s DataBinder/SmartDispatcherController是否要针对包含接口属性的类型进行绑定?_Linq To Sql_Castle Monorail_Databinder - Fatal编程技术网

Linq to sql 如何获得Castle MonoRail';s DataBinder/SmartDispatcherController是否要针对包含接口属性的类型进行绑定?

Linq to sql 如何获得Castle MonoRail';s DataBinder/SmartDispatcherController是否要针对包含接口属性的类型进行绑定?,linq-to-sql,castle-monorail,databinder,Linq To Sql,Castle Monorail,Databinder,我们正在使用接口来表示域模型中的实体类。通过使用LinqToSql,我们有了这些的具体实现。我们已经向每个LinqToSql类添加了一个工厂方法,我们的服务层使用它来实例化一个新实体(注意,与控制器的DataBind属性相反) MonoRail的默认DataBinder实现将忽略定义为接口的属性 理想情况下,我们不想在MonoRail中实例化我们的数据层类-接口的全部要点是分离这些关注点 此外,我们并不想创建另一组非LinqToSql具体类,它们的唯一任务是在层之间进行转换 这里漫长的一天终于结

我们正在使用接口来表示域模型中的实体类。通过使用LinqToSql,我们有了这些的具体实现。我们已经向每个LinqToSql类添加了一个工厂方法,我们的服务层使用它来实例化一个新实体(注意,与控制器的DataBind属性相反)

MonoRail的默认DataBinder实现将忽略定义为接口的属性

理想情况下,我们不想在MonoRail中实例化我们的数据层类-接口的全部要点是分离这些关注点

此外,我们并不想创建另一组非LinqToSql具体类,它们的唯一任务是在层之间进行转换


这里漫长的一天终于结束了;请有人发发发慈悲,指出IDataBinder中我们应该用自己的实现来重载的部分,或者暗示我们可能尝试的其他方法?;-)

您应该看看IParameterBinder。看看

正如Ken所指出的,您的想法可以通过自定义IParameterBinder实现

解决方案是使用IOC:

  • 从窗体的接口解析窗体的具体实例
  • 然后使用IDataBinder将实例绑定到请求参数
另一种方法是使用IDictionaryAdapter:

  • 为接口生成dto代理
  • 然后使用IDataBinder将dto代理实例绑定到请求参数
注意:如果接口:

  • 不公开(哼)
  • 有办法
  • 或事件
  • 或只读属性
  • 或仅设置属性
最后,我不确定在控制器签名中暴露具体类的问题是什么

我本人在实现应用层服务中定义的接口的控制器中使用了具体的形式,它允许我将关注点从双方分离:

  • 控制器端是表单/命令的Http映射和第一级数据验证
  • 应用层服务是表单/命令的业务验证和处理

当时,我犯了直接绑定到实体类的错误,而实体类恰好是接口的。我不再那样做;-)