最开始的代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Reflection; 7 8 using AutoMapper; 9 10 using Happy.ExtentionMethods; 11 using Happy.Bootstrap; 12 13 namespace Happy.Bootstrap.AutoMapper 14 { 15 /// <summary> 16 /// 自动添加配置。 17 /// </summary> 18 public class AutoAddProfilePlugin : IBootstrapPlugin 19 { 20 /// <inheritdoc /> 21 public void Start(IBootstrapService bootstrapService, Assembly assembly) 22 { 23 bootstrapService.MustNotNull("bootstrapService"); 24 assembly.MustNotNull("assembly"); 25 26 foreach (var type in assembly.GetTypes()) 27 { 28 if (type.IsAbstract || type.IsInterface) 29 { 30 continue; 31 } 32 33 if (typeof(Profile).IsAssignableFrom(type)) 34 { 35 Mapper.Initialize(x => { 36 x.AddProfile(Activator.CreateInstance(type) as Profile); 37 }); 38 } 39 } 40 } 41 } 42 }
问题
我的项目中,每个 dll 都是自描述的,系统启动的时候,对每个 dll 对执行上面的插件,结果, Mapper.Initialize() 只有最后一次配置才有效,前面的配置会丢失。
最后的代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Reflection; 7 8 using AutoMapper; 9 10 using Happy.ExtentionMethods; 11 using Happy.Bootstrap; 12 13 namespace Happy.Bootstrap.AutoMapper 14 { 15 /// <summary> 16 /// 自动添加配置。 17 /// </summary> 18 public class AutoAddProfilePlugin : IBootstrapPlugin 19 { 20 /// <inheritdoc /> 21 public void Start(IBootstrapService bootstrapService, Assembly assembly) 22 { 23 bootstrapService.MustNotNull("bootstrapService"); 24 assembly.MustNotNull("assembly"); 25 26 foreach (var type in assembly.GetTypes()) 27 { 28 if (type.IsAbstract || type.IsInterface) 29 { 30 continue; 31 } 32 33 if (typeof(Profile).IsAssignableFrom(type)) 34 { 35 Mapper.AddProfile(Activator.CreateInstance(type) as Profile); 36 } 37 } 38 } 39 } 40 }