Недавно я работал над небольшим побочным проектом с использованием Umbraco 8, и я поставил перед собой задачу заставить Auto-mapper работать с внедрением зависимостей. У меня работают базовые c мапперы, но заставить DI вводить мапперы с помощью ConstructServicesUsing было сложнее.
Чтобы заставить его работать, мне пришлось связать свои классы TypeConverter напрямую, когда я привязываю сопоставитель.
Я что-то упустил из виду? или есть способ выделить все ITypeConverter в сборке и связать их автоматически?
public class MapperConfigurationComposer : IComposer
{
public void Compose(Composition composition)
{
var serviceContainer = composition.Concrete as LightInject.ServiceContainer;
var mapperConfiguration = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.AddProfile(new MappingProfile());
cfg.ConstructServicesUsing(type => serviceContainer.TryGetInstance(type));
});
var mapper = mapperConfiguration.CreateMapper();
composition.Register(mapper);
composition.Register<SearchResultToSearchResultResponseItemTypeConverter>();
}
}
internal class MappingProfile: AutoMapper.Profile
{
public MappingProfile()
{
CreateMap<ISearchResult, SearchResultResponseItem>().ConvertUsing<SearchResultToSearchResultResponseItemTypeConverter>();
}
}