.NET/ASP。NETMVC大型站点架构设计——迁移模型元数据设置项(自定义元数据提供程序)

  

<李>

<李>


<李>

<李>


1。需求背景介绍(模型元数据设置项应该与视图绑定而非ViewModel)

1.2。确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型)

,而不是ViewModel;

.NET/ASP。NETMVC大型站点架构设计——迁移模型元数据设置项(自定义元数据提供程序)

2。迁移ViewModel设置到外部配置文件(扩展模型元数据提供程序)

.NET/ASP。NETMVC大型站点架构设计——迁移模型元数据设置项(自定义元数据提供程序)

创建用于获取任何一个外部类型的元数据提供程序对象,比如:(用于数据库的接口),(用户配置文件),(远程服务);

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():空;
  }
  }
  }

.NET/ASP。NETMVC大型站点架构设计——迁移模型元数据设置项(自定义元数据提供程序)

使用系统;   使用System.Collections.Generic;   使用System.Web.Mvc;   名称空间MvcApplication4.Seed   {   公开课CustomModelMetadataProviderWithConfig: System.Web.Mvc.ModelMetadataProvider   {   私有静态CustomModelMetadataProviderWithConfig提供者=new CustomModelMetadataProviderWithConfig ();   公共静态CustomModelMetadataProviderWithConfig CurrentProvider   {   {回报提供者;}   }   公共覆盖IEnumerableGetMetadataForProperties(对象容器类型containerType)   {   把新NotImplementedException();//复杂类型实现,属性的循环获取   }   公共覆盖ModelMetadata GetMetadataForProperty (FuncmodelAccessor containerType型,字符串propertyName)   {   把新NotImplementedException();//复杂类型实现,属性的循环获取   }   公共覆盖ModelMetadata GetMetadataForType (Func

.NET/ASP。NETMVC大型站点架构设计——迁移模型元数据设置项(自定义元数据提供程序)

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5