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));
}
2 ответа
Решение
В итоге я использовал следующие методы расширения
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));
}
В моем классе конфигурации контейнера Unity я называю их
container.RegisterMapper();
container.RegisterMappingProfile<WebProfile>();
Наткнулся на ту же проблему, наконец, заработал, выполнив следующее
var configuration = new MapperConfiguration(x =>
{
//Your configuration for your mapper
});
var mapper = configuration.CreateMapper();
container.RegisterInstance(mapper);