- <李>
- <李>
李>
- <李>
李>
1。需求背景介绍(模型元数据设置项应该与视图绑定而非ViewModel)
引用>
1.2。确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型)
,而不是ViewModel;
引用>
2。迁移ViewModel设置到外部配置文件(扩展模型元数据提供程序)
创建用于获取任何一个外部类型的元数据提供程序对象,比如:(用于数据库的接口),(用户配置文件),(远程服务);
引用>
2.1。实现元数据提供程序(简单示例)
<强> 强>
; 使用来; 使用System.Web.Mvc; 名称空间MvcApplication4.Seed { 公共enum视图 { HomePage_Index, HomePage_Edit } 公共enum视图模型 { 客户 } 公开课ViewMappingModelMetadata { 公众视野观点{得到;设置;} 公共ViewModel ViewModel{得到;设置;} 公共{ModelMetadata元数据;设置;} } 公开课ViewMappingModelMetadataCollection: Dictionary<看来,List比; { 私有静态ViewMappingModelMetadataCollection科尔=new ViewMappingModelMetadataCollection (); 静态ViewMappingModelMetadataCollection () {//在主页下的视图- - -来自外部文件的接口,这里只是示例显示 coll.Add(视图。HomePage_Index,新的List ()); 科尔(View.HomePage_Index)。添加(新ViewMappingModelMetadata () {=View.HomePage_Index视图, ViewModel=ViewModel.Customer, 元数据=https://www.yisu.com/zixun/new ModelMetadata (CustomModelMetadataProviderWithConfig。CurrentProvider typeof (Models.Customer), ()=>{返回新Models.Customer () .CustomerId;},typeof(字符串),“CustomerId”) { DisplayFormatString=@”主页\ DisplayName: {0}” } });//在EditCustomer下的视图——来自外部文件的接口,这里只是示例显示 coll.Add(视图。HomePage_Edit,新的List ()); 科尔(View.HomePage_Edit)。添加(新ViewMappingModelMetadata () {=View.HomePage_Edit视图, ViewModel=ViewModel.Customer, 元数据=https://www.yisu.com/zixun/new ModelMetadata ( CustomModelMetadataProviderWithConfig。CurrentProvider typeof (Models.Customer), ()=>{返回新Models.Customer () .CustomerId;},typeof(字符串),“CustomerId”) { DisplayFormatString=@”编辑\ DisplayName: {0}” } }); } 公共静态ViewMappingModelMetadataCollection当前 { {回报科尔;} } 公共ModelMetadata GetMetadataByView(视图视图,视图模型模型) { var金属工人=从项目在科尔(视图)项目。ViewModel==模型选择item.Metadata; 返回金属工人!=零,,metaList.Count()比;0 ?metaList.LastOrDefault():空; } } }
使用系统; 使用System.Collections.Generic; 使用System.Web.Mvc; 名称空间MvcApplication4.Seed { 公开课CustomModelMetadataProviderWithConfig: System.Web.Mvc.ModelMetadataProvider { 私有静态CustomModelMetadataProviderWithConfig提供者=new CustomModelMetadataProviderWithConfig (); 公共静态CustomModelMetadataProviderWithConfig CurrentProvider { {回报提供者;} } 公共覆盖IEnumerableGetMetadataForProperties(对象容器类型containerType) { 把新NotImplementedException();//复杂类型实现,属性的循环获取 } 公共覆盖ModelMetadata GetMetadataForProperty (Func