【发布时间】:2015-03-14 17:17:45
【问题描述】:
我已经使用 Microsoft Unity Framework 配置了 Automapper,但是当我尝试像下面提到的代码那样进行映射时,我得到 “缺少类型映射配置或不支持的映射。”
var orderResponse = this.Mapper.Map<Order, OrderV1>(order);
我无法弄清楚我到底在哪里犯了错误。
我已经按照下面提到的步骤进行了
-
个人资料创建
public class OrderProfile : Profile { public OrderProfile() { Mapper.CreateMap<Order, OrderV1>() .ReverseMap();
} }
2.Unity容器的注册
protected void Application_Start()
{
var container = InitializeUnity();
//Automapper Profile Registration
container.RegisterAutoMapperType(new ContainerControlledLifetimeManager());
}
public static IUnityContainer InitializeUnity()
{
using (IUnityContainer container = new UnityContainer())
{
------------
------------
return container ;
}
}
3.配置文件注册的扩展方法
public static class UnityExtensions
{
public static void RegisterAutoMapperType(this IUnityContainer container, LifetimeManager lifetimeManager = null)
{
RegisterAutoMapperProfiles(container);
var profiles = container.ResolveAll<Profile>();
var autoMapperConfigurationStore = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);
profiles.Each(autoMapperConfigurationStore.AddProfile);
autoMapperConfigurationStore.AssertConfigurationIsValid();
container.RegisterInstance<IConfigurationProvider>(autoMapperConfigurationStore, new ContainerControlledLifetimeManager());
container.RegisterInstance<IConfiguration>(autoMapperConfigurationStore, new ContainerControlledLifetimeManager());
container.RegisterType<ConfigurationStore, ConfigurationStore>(new ContainerControlledLifetimeManager(), new InjectionConstructor(typeof(ITypeMapFactory), MapperRegistry.Mappers));
container.RegisterType<IConfigurationProvider, ConfigurationStore>( new ContainerControlledLifetimeManager());
container.RegisterType<IConfiguration, ConfigurationStore>();
container.RegisterType<ITypeMapFactory, TypeMapFactory>();
container.RegisterType<IMappingEngine, MappingEngine>(lifetimeManager ?? new TransientLifetimeManager(), new InjectionConstructor(typeof(IConfigurationProvider)));
}
private static void RegisterAutoMapperProfiles(IUnityContainer container)
{
IEnumerable<Type> autoMapperProfileTypes = AllClasses.FromAssemblies(AppDomain.CurrentDomain.GetAssemblies())
.Where(type => type != typeof(Profile) && typeof(Profile).IsAssignableFrom(type));
autoMapperProfileTypes.Each(autoMapperProfileType =>
container.RegisterType(typeof(Profile),
autoMapperProfileType,
autoMapperProfileType.FullName,
new ContainerControlledLifetimeManager(),
new InjectionMember[0]));
}
}
【问题讨论】:
标签: .net c#-4.0 asp.net-web-api automapper