0
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:

正如@12seconds 提到的,我开始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();在几个地方打电话。当我开始运行应用程序时,我收到了相同的错误消息

映射器未初始化。使用适当的配置调用初始化。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态 Mapper.Map 方法的任何调用,并且如果您使用 ProjectTo 或 UseAsDataSource 扩展方法,请确保传入适当的 IConfigurationProvider实例。

我想在哪里打电话AutoMapperConfiguration.Configure();?我错过了什么?

4

2 回答 2

1

版本 5.0.x +

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<MappingProfile>();
        });

        Mapper.AssertConfigurationIsValid();               
    }
}
于 2017-11-27T06:33:02.307 回答
0

问题解决了。 Mapper.AssertConfigurationIsValid();应该在 Mapper 初始化之后执行。

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        Mapper.Initialize(x =>
        {
            x.AddProfile<MappingProfile>();
        });

        Mapper.Configuration.AssertConfigurationIsValid();               
    }
}
于 2017-11-23T21:44:34.120 回答