来自 奥门威尼斯网址 2019-12-23 06:47 的文章
当前位置: 威尼斯国际官方网站 > 奥门威尼斯网址 > 正文

中的有意思应用

新近开采了贰个比较风趣的东西 AutoMapper,首要将Model调换为DTO,DTO更重视数量,对天地对象开展客观封装,进而不会将世界对象的行为过度暴光给表现层。

先来看一些实例,多少个类之间的照耀。

首先定义八个类Source与DTOSource:

 1  public class Source
 2     {
 3         public int Id { get; set; }
 4         public string Content { get; set; }
 5     }
 6 
 7     public class DTOSource
 8     {
 9         public int Id { get; set; }
10         public string Content { get; set; }
11     }

 Source与DTOSource字段完全相通,来探访它俩怎么通过AutoMapper调换,代码相当粗略。

1 Mapper.Initialize(x=>{
2      x.CreateMap<Source,DTOSource>();
3 });
4 
5 Source s = new Source{Id=1,Content="123"};
6 
7 DTOSource dto = Mapper.Map<DTOSource>(s);

先是步创立Source到DTOSource之间的映射,初步化三个Source实例后,来看下试行结果:

奥门威尼斯网址 1

进行到位后,能够看来dto中的数据与前边最初化的s的多寡是同样的,就如直接将s拷贝了大器晚成份给dto,在八个类字段名定全相像的境况下如此,那么后生可畏旦DTOSource中的字段名与Source中的区别样怎么样,其实也很简短,只需

要改成一丢丢的代码既可:

小编们将DTOSource中的Content的字段名改成Desc,那时只要求树立映射关系时,钦定字段就足以了:

1 Mapper.Initialize(x => {
2    x.CreateMap<Source, DTOSource>().ForMember(c=>c.Desc,q=> {
3       q.MapFrom(z => z.Content);
4      });
5 });

来探视运维结果什么;

奥门威尼斯网址 2

能够看到与在此之前的运营结果是千篇大器晚成律的。

那正是说怎么着映射四个List,其实也极粗略,和上述代码大致能够说是绘影绘声,只是在终极一步时,要做一丝丝的校勘就可以了。如上面代码:

 1  Mapper.Initialize(x => {
 2                 x.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q =>
 3                 {
 4                     q.MapFrom(z => z.Content);
 5                 });
 6             });
 7 
 8             s.Add(new Source { Id = 1, Content = "123" });
 9 
10             var dto = Mapper.Map<List<DTOSource>>(s);

 

可以观察除了最终一句代码,别的差相当少是完全雷同的,只是在最后一句代码中,目的项目改成了List<DTOSource>仅此而已。看下运转结果什么:

奥门威尼斯网址 3

结果适合预期。

在其实的种类中,那样的写法料定是不相符必要的,常常会做二个包装,新建二个SourceProfile继承自Profile:

1  public SourceProfile()
2         {
3             base.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
4                 q.MapFrom(z => z.Content);
5             });
6         }

奥门威尼斯网址 ,抱有映射关系都能够写在这里三个类里,只要求在前后相继开首化的时候调用一遍就足以了:

 1 Mapper.Initialize(x => {  x.AddProfile<SourceProfile>();  }); 

博主使用的AutoMapper版本6.1.1.0,因为AutoMapper在6.0版本时移除了Profile中的Configure,所以与6.0本子以下写法有一些不一样,6.0之下版本写法为:

1 public class SourceProfile : Profile
2     {
3         protected override void Configure()
4         {
5             CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
6                 q.MapFrom(z => z.Content);
7             });
8         }
9     }

接轨Profile重写其Configure就能够,调用形式与上述没有太大差距。 Mapper.Initialize中可增添八个或八个Profile。

在MVC项指标运用中,能够将Mapper.Initialize封装到两个类里;

 public static class AutoMapperForMvc
    {
        public  static void Register()
        {
            Mapper.Initialize(x => {
                x.AddProfile<SourceProfile>();
            });
        }

    }

 进而在MVC的Global中进一遍性注册:

 1 public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7             RouteConfig.RegisterRoutes(RouteTable.Routes);
 8             BundleConfig.RegisterBundles(BundleTable.Bundles);
 9             //注册
10             AutoMapperForMvc.Register();
11         }
12     }

 更加的多风趣的事物得以查看官网

本文由威尼斯国际官方网站发布于奥门威尼斯网址,转载请注明出处:中的有意思应用

关键词: