2016-02-12 70 views
1

我不能完全知道如何將以下結構地圖實現轉換爲統一。在同樣的問題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)); 
} 
+0

看看這個NuGet包:https://www.nuget.org/packages/UnityAutoRegistration/我用了幾次,它工作得很好。 – Ric

回答

0

我結束了使用下面的擴展方法

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>(); 
5

冉,終於得到了它做工作,則下列

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

     var mapper = configuration.CreateMapper(); 

     container.RegisterInstance(mapper); 
+2

容器從哪裏來?我應該在哪裏將這個代碼註冊爲統一注入? – Thunderer