我有一个项目,我一直在使用Automapper2.2.1。我升级到4.2.1,完全崩溃了。我试图遵循这,将对Mapper.CreateMap<Source, Target>()的所有引用都更改为Mapper.Initialize(cfg => { cfg.CreateMap<Source, Target>()})。我现在坏了,我似乎无法完成它,我得到的"System.Reflection.ReflectionTypeLoadException被用户代码异常处理,无法加载一个或多个所请求的类型。检索LoaderExceptions属性以获得更多信息“消息。我错过了什么。代码如下:
AutomapperTypeAdapterFactory
public class AutomapperTypeAdapterFactory : ITypeAdapterFactory
{
public AutomapperTypeAdapterFactory()
{
//scan all assemblies finding Automapper Profile
var profiles = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.BaseType == typeof(Profile));
Mapper.Initialize(cfg =>
{
foreach (var item in profiles)
{
if (item.FullName != "AutoMapper.SelfProfiler`2")
cfg.AddProfile(Activator.CreateInstance(item) as Profile);
}
});
}
public ITypeAdapter Create() => new AutomapperTypeAdapter();
}部门概况
public class DepartmentProfile : Profile
{
protected override void Configure()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Department, DepartmentDto>();
});
}
}UnityContainer
public static class Container
{
static IUnityContainer _container = new UnityContainer();
static Container()
{
var typeAdapterFactory = _container.Resolve<ITypeAdapterFactory>();
TypeAdapterFactory.SetCurrent(typeAdapterFactory);
}
//other container resolutions....
}发布于 2016-04-18 10:20:06
在脱离静态配置的项目中,我定义了几个映射配置文件(通常每个应用程序层都有一个概要文件):
public class MappingProfile : Profile
{
protected override void Configure()
{
CreateMap<Source, Destination>();
}
}然后我配置我的IoC (在我的例子中是SimpleInjector),以查找所有的配置文件,并将它们添加到一个单一的统一配置中。然后,我在容器中注册MapperConfiguration,以及从该容器中创建的IMapper对象:
public void ConfigureSimpleInjector(IAppBuilder app)
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
container.RegisterAutoMapper();
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.RegisterMvcIntegratedFilterProvider();
container.Verify();
DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));
}
public static Container RegisterAutoMapper(this Container container)
{
var profiles = typeof(AutoMapperRegistry).Assembly.GetTypes().Where(t => typeof(Profile).IsAssignableFrom(t)).Select(t => (Profile)Activator.CreateInstance(t));
var config = new MapperConfiguration(cfg =>
{
foreach (var profile in profiles)
{
cfg.AddProfile(profile);
}
});
container.Register<MapperConfiguration>(() => config);
container.Register<IMapper>(() => container.GetInstance<MapperConfiguration>().CreateMapper());
return container;
}
}然后,我可以将DI用于IMapper (或者您可以静态地存储它),以及用于LINQ投影的MapperConfiguration。
https://stackoverflow.com/questions/36686955
复制相似问题