【发布时间】:2013-11-07 20:15:03
【问题描述】:
我们已将业务逻辑层和业务对象分离为一个完全独立的项目/程序集。模型的某些属性可以包含 HTML 内容。在业务逻辑之前,我们有一个 ASP.NET MVC Web 应用程序,用户可以在其中管理业务对象。
- 要允许特定属性上的 HTML 内容,我们必须添加 AllowHtml 属性。但我们不能,因为我们不想在核心项目中引用 System.Web.Mvc。
- 部分类不能跨多个程序集使用。
- 使用 MetadataType 属性不是一个选项,因为它会导致对 MVC 的间接依赖或核心层和 Web 应用程序之间的循环依赖。
- 另一个部分解决方案是通过使用 ValidateInput 属性关闭整个请求的请求验证,但我们只想关闭特定属性的请求验证。
- 属性不是虚拟的,因此我们不能简单地创建派生类型来覆盖特定属性。
- 我们不想复制我们的业务对象来查看具有完全相同属性和元数据的模型。
- 不能覆盖模型绑定逻辑。
那么,我们如何向 MVC 模型绑定器指示我们希望在(并且仅在)某些特定属性上允许 HTML 内容,而不在我们的业务逻辑层中引用 ASP.NET MVC?或者,如何在没有强引用的情况下从另一个程序集注入元数据?
谢谢。
【问题讨论】:
-
在您的核心项目中引用 System.Web.Mvc(进而引用 System.Web)是否会出现问题?
-
你是认真的吗!?按照您的模式,我可以参考 Windows Phone、Windows RT、WPF、Windows 窗体、ASP.NET MVC ......以及分离的核心程序集中的所有技术。根本没有分离的意义。
-
您排除解决方案 - 查看模型或包括参考。坦率地说,其他任何事情都会比它的价值更麻烦。
-
绝对不能引用任何特定的东西。我们的核心层甚至可以建立在 PCL 上。 ViewModel 是,但复制所有内容并保持一致需要大量工作。
-
你不必在视图模型中复制,事实上那是没有意义的。视图模型应该就是这样 - 为视图优化,而不是业务对象的副本。
标签: asp.net .net asp.net-mvc security dependency-management