automapper自动创建映射_.NetCore学习笔记:四、AutoMapper对象映射

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:50   2219   0

什么是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 }

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP