Ошибка при инициализации AutoMapper v6 в приложении ASP.NET MVC
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SomeSourceModel, SomeDestinationModel>();
});
config.AssertConfigurationIsValid();
var mapper = config.CreateMapper();
Я повторяю эти коды в проекте. Думая создать общий интерфейс IMapper, чтобы я мог вызывать всякий раз, когда это необходимо использовать.
Решение, которое я создаю,
private IMapper Mapper(TSource source, TDestination dest)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<source, dest>();
});
config.AssertConfigurationIsValid();
return config.CreateMapper();
}
Не работает Проблема в том, что я не могу передать исходную модель и модель назначения в качестве параметров таким способом. Как это решить?
Обновление 1:
Как упомянуто @12 секунд, я начинаю инициализацию MapperConfigration
в Global.asax.cs
В папке App_Start я создал
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<SourceModel1, DestinationModel1>();
CreateMap<SourceModel2, DestinationModel2>();
CreateMap<SourceModel3, DestinationModel3>();
CreateMap<SourceModel4, DestinationModel4>();
CreateMap<SourceModel5, DestinationModel5>();
Mapper.AssertConfigurationIsValid();
}
}
В Global.asax.cs
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
});
}
}
И тогда я попытался позвонить AutoMapperConfiguration.Configure();
в нескольких местах. Когда я запускаю приложение, я получаю те же сообщения об ошибках:
Картограф не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов статических методов Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий IConfigurationProvider. пример.
Куда я полагаю позвонить AutoMapperConfiguration.Configure();
? Я что-то пропустил?
2 ответа
Проблема решена. Mapper.AssertConfigurationIsValid();
должен быть выполнен после инициализации Mapper.
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
});
Mapper.Configuration.AssertConfigurationIsValid();
}
}
Версия 5.0.x +
public class AutoMapperConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<MappingProfile>();
});
Mapper.AssertConfigurationIsValid();
}
}