最开始的代码
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.AutoMapper14 {15 ///16 /// 自动添加配置。17 /// 18 public class AutoAddProfilePlugin : IBootstrapPlugin19 {20 ///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.AutoMapper14 {15 ///16 /// 自动添加配置。17 /// 18 public class AutoAddProfilePlugin : IBootstrapPlugin19 {20 ///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 }