什么是automapper?
automapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码。这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来为我们做?
我们来看看在.netcore3.1中怎样使用automapper9.0。
1 public class basicprofile : profile, iprofile
2 {
3 public basicprofile()
4 {
5 createmap();
6 createmap();
7 }
8 }
profile提供了一个命名的映射类,所有继承自profile类的子类都是一个映射集合。这里我创建了一个basicprofile继承profile类。
createmap创建映射规则。
iprofile创建影射类的约束,表示继承自该接口的类为映射集合。
由于automapper9.0中取消了自动创建影射规则的方法这里我们需要自己写一个:
1 public static class servicecollectionextensions
2 {
3 ///
4 /// 自动创建映射
5 ///
6 ///
7 public static void addautomapper(this iservicecollection services)
8 {
9 var allprofile = directory.getfiles(appdomain.currentdomain.basedirectory, "*.dll").select(assembly.loadfrom)
10 .selectmany(y => y.definedtypes)
11 .where(p => p.getinterfaces().contains(typeof(iprofile)))
12 .toarray();
13 services.addautomapper(allprofile);
14 }
15 }
添加到configureservices:
1 public void configureservices(iservicecollection services)
2 {
3 //自动创建映射
4 services.addautomapper();
5 }
这样automapper就配置完成,但为了方便调用,我们继续写几个扩展:
1 public static class automapperapplicationbuilderextensions
2 {
3 private static iserviceprovider _serviceprovider;
4 public static void usestateautomapper(this iapplicationbuilder applicationbuilder)
5 {
6 _serviceprovider = applicationbuilder.applicationservices;
7 }
8
9 public static tdestination map(object source)
10 {
11 var mapper = _serviceprovider.getrequiredservice();
12 return mapper.map(source);
13 }
14
15 public static tdestination map(tsource source)
16 {
17 var mapper = _serviceprovider.getrequiredservice();
18
19 return mapper.map(source);
20 }
21
22 public static tdestination mapto(this tsource source)
23 {
24 var mapper = _serviceprovider.getrequiredservice();
25 return mapper.map(source);
26 }
27
28 public static tdestination mapto(this object source)
29 {
30 var mapper = _serviceprovider.getrequiredservice();
31 return mapper.map(source);
32 }
33
34 public static list maptolist(this ienumerable source)
35 {
36 var mapper = _serviceprovider.getrequiredservice();
37 return mapper.map>(source);
38 }
39
40 public static list maptolist(this ienumerable source)
41 {
42 var mapper = _serviceprovider.getrequiredservice();
43 return mapper.map>(source);
44 }
45 }
添加到configure:
1 public void configure(iapplicationbuilder app, iwebhostenvironment env)
2 {
3 app.usestateautomapper();
4 }
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!