Я использую последнюю версию Automapper в своем приложении вместе с Autofac. Я установил конфигурации, профили и блок, проверил все мои профили с AssertIsConfigurationValid()
, и все работает нормально. Однако, когда я использую картограф в моем приложении я получаю "Automapper missing type map configuration or unsupported mapping"
исключение только при запуске из кода, я подозреваю, что это что-то делать с тем, как я установил картограф работать с Autofac:Проблемы с настройкой Autofac для работы с Automapper
// This is how I register my mapper with Autofac
public class ModelsMapperModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes().AssignableTo(typeof(Profile)).As<Profile>();
builder.Register(c => new MapperConfiguration(cfg =>
{
foreach (var profile in c.Resolve<IEnumerable<Profile>>())
{
cfg.AddProfile(profile);
}
})).AsSelf().SingleInstance();
builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)).As<IMapper>().InstancePerLifetimeScope();
}
}
// Here is a simple version of my objects and mappings:
public class LetterDomain
{
public List<StationDomain> Stations {get; set;}
public string Title {get; set;}
public int Id {get; set;}
public int TimeCreated {get; set;}
public string File {get; set;}
public bool IsSecret {get; set;}
}
public class StationDomain
{
public int Id {get; set;}
public string Owner {get; set;}
public string Name {get; set;}
}
public class LetterDto
{
public DestinationDto Dest {get; set;}
public int Id {get; set;}
}
public class DestinationDto
{
public List<StationDto> Stations {get; set;}
}
public class StationDto
{
public string Name {get; set;}
}
public class MyProfile : Profile
{
protected override void Configure
{
CreateMap<StationDomain, StationDto>()
CreateMap<LetterDomain, DestinationDto>();
CreateMap<LetterDomain, LetterDto>()
.ForMember(x => x.Dest, opt => opt.MapFrom(src => Mapper.Map<DestinationDto>(src)));
}
}
public void MyMethodInsideApplication(LetterDomain letter)
{
// Exception is thrown here
var dto = _mapper.Map<LetterDto>(letter);
}
Я м пытается отобразить LetterDomain
к LetterDto
в моем приложении, и он говорит мне, что конфигурация LetterDomain
в DestinationDto
отсутствует, хотя я определенно создал отображение ..
действительно хотел бы некоторую помощь здесь ..
Спасибо заранее!
Edit: Я просто хочу добавить, что все другие отображения, которые не используют статический Mapper.Map <> внутри их профиля конфигурации хорошо работают в приложении
В каком классе делает 'метод MyMethodInsideApplication' жить? Был ли такой класс создан через контейнер? Можете ли вы показать, как? –
Это синглтон, он разрешен в startapp –
Где вы используете статический метод «Mapper.Map <>»? можете ли вы показать этот код? –