Ошибка при инициализации 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();               
    }
}
Другие вопросы по тегам