【问题标题】:AutoMapper with Unity: Missing type map configuration or unsupported mappingAutoMapper with Unity:缺少类型映射配置或不支持的映射
【发布时间】:2015-03-14 17:17:45
【问题描述】:

我已经使用 Microsoft Unity Framework 配置了 Automapper,但是当我尝试像下面提到的代码那样进行映射时,我得到 “缺少类型映射配置或不支持的映射。”

var orderResponse = this.Mapper.Map<Order, OrderV1>(order);

我无法弄清楚我到底在哪里犯了错误。

我已经按照下面提到的步骤进行了

  1. 个人资料创建

    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


    【解决方案1】:

    在您的个人资料中,调用 CreateMap,而不是 Mapper.CreateMap,并覆盖 Configure

    public class OrderProfile : Profile {
        protected override void Configure() {
            base.CreateMap<Order, OrderV1>()
                .ReverseMap();
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2017-04-16
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多