繁体   English   中英

Automapper 4.2 Unity注入MapperConfiguration

[英]Automapper 4.2 Unity Inject MapperConfiguration

我不太清楚如何将以下结构图实现转换为统一。

public AutoMapperRegistry()
{
    var profiles =
        from t in typeof (AutoMapperRegistry).Assembly.GetTypes()
        where typeof (Profile).IsAssignableFrom(t)
        select (Profile)Activator.CreateInstance(t);

    var config = new MapperConfiguration(cfg =>
    {
        foreach (var profile in profiles)
        {
            cfg.AddProfile(profile);
        }
    });

    For<MapperConfiguration>().Use(config);
    For<IMapper>().Use(ctx => ctx.GetInstance<MapperConfiguration>().CreateMapper(ctx.GetInstance));
}

遇到相同的问题,最后通过执行以下操作使其正常工作

        var configuration = new MapperConfiguration(x =>
        {
              //Your configuration for your mapper
        });

        var mapper = configuration.CreateMapper();

        container.RegisterInstance(mapper);

我最终使用了以下扩展方法

    public static IUnityContainer RegisterMapper(this IUnityContainer container)
    {
        return container
        .RegisterType<MapperConfiguration>(new ContainerControlledLifetimeManager(), new InjectionFactory(c =>
               new MapperConfiguration(configuration =>
               {
                   configuration.ConstructServicesUsing(t => container.Resolve(t));
                   foreach (var profile in c.ResolveAll<Profile>())
                       configuration.AddProfile(profile);
               })))
        .RegisterType<IConfigurationProvider>(new ContainerControlledLifetimeManager(), new InjectionFactory(c => c.Resolve<MapperConfiguration>()))
        .RegisterType<IMapper>(new InjectionFactory(c => c.Resolve<MapperConfiguration>().CreateMapper()));
    }

    public static IUnityContainer RegisterMappingProfile<T>(this IUnityContainer container)
        where T : Profile
    {
        return RegisterMappingProfile(container, typeof(T));
    }

在我的统一容器配置类中,我称它们为

        container.RegisterMapper();
        container.RegisterMappingProfile<WebProfile>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM