2016-02-12 5 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