C# 在最新版本中使用Automapper静态API?

C# 在最新版本中使用Automapper静态API?,c#,asp.net,automapper,C#,Asp.net,Automapper,我已将Automapper从4.2.1升级到5.0.0。我在一个WebApi2项目中使用静态API,并试图使映射正常工作,因此我尝试了以下方法 因此,我将代码更改为以下内容: public static class AutoMapping { public static void Config() { Mapper.Initialize(main => { var config = new MapperConfigur

我已将Automapper从4.2.1升级到5.0.0。我在一个WebApi2项目中使用静态API,并试图使映射正常工作,因此我尝试了以下方法

因此,我将代码更改为以下内容:

public static class AutoMapping
{
    public static void Config()
    {
        Mapper.Initialize(main =>
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMissingTypeMaps = true;
                cfg.CreateMap<MyModel, MyDto>().ReverseMap();
            });
            config.AssertConfigurationIsValid();
        });
    }
}
其次,问题可能出在我用来忽略缺失属性的以下方法中:

public static IMappingExpression<TSource, TDestination> IgnoreUnmapped<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
    var typeMap = Mapper.Configuration.FindTypeMapFor<TSource, TDestination>();
    if (typeMap != null)
    {
        foreach (var unmappedPropertyName in typeMap.GetUnmappedPropertyNames())
        {
            expression.ForMember(unmappedPropertyName, opt => opt.Ignore());
        }
    }

    return expression;
}

实际上,您的代码现在什么都不做。您必须这样更改它:

public static class AutoMapping
{
    public static void Config()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.CreateMissingTypeMaps = true;
            cfg.CreateMap<MyModel, MyDto>().ReverseMap();
        });
        Mapper.AssertConfigurationIsValid();
    }
}
公共静态类自动映射
{
公共静态void Config()
{
Mapper.Initialize(cfg=>
{
cfg.CreateMissingTypeMaps=true;
CreateMap().ReverseMap();
});
assertConfigurationsValid();
}
}
UPD(在EDIT1之后):


尝试使用
expression.TypeMap
而不是
Mapper.Configuration.FindTypeMapFor()

实际上,您的代码现在什么都不做。您必须这样更改它:

public static class AutoMapping
{
    public static void Config()
    {
        Mapper.Initialize(cfg =>
        {
            cfg.CreateMissingTypeMaps = true;
            cfg.CreateMap<MyModel, MyDto>().ReverseMap();
        });
        Mapper.AssertConfigurationIsValid();
    }
}
公共静态类自动映射
{
公共静态void Config()
{
Mapper.Initialize(cfg=>
{
cfg.CreateMissingTypeMaps=true;
CreateMap().ReverseMap();
});
assertConfigurationsValid();
}
}
UPD(在EDIT1之后):

尝试使用
expression.TypeMap
而不是
Mapper.Configuration.FindTypeMapFor()

这可能有帮助:

设置配置:

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
var config=new-MapperConfiguration(cfg=>cfg.CreateMap());
然后在何处进行映射:

var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
var映射器=新映射器(配置);
OrderDto-dto=mapper.Map(order);
您还可以将“config”作为静态属性公开,并在项目中使用它。还有一种方法可以创建已配置的静态“映射器”属性。然后,您可以在项目中使用该静态“映射器”属性。

也许这有助于:

设置配置:

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>());
var config=new-MapperConfiguration(cfg=>cfg.CreateMap());
然后在何处进行映射:

var mapper = new Mapper(config);
OrderDto dto = mapper.Map<OrderDto>(order);
var映射器=新映射器(配置);
OrderDto-dto=mapper.Map(order);

您还可以将“config”作为静态属性公开,并在项目中使用它。还有一种方法可以创建已配置的静态“映射器”属性。然后,您可以在项目中使用该静态“映射器”属性。

从哪个事件调用Global.asax中的此函数?从哪个事件调用Global.asax中的此函数?谢谢您的提示。它实际上是
Mapper.Configuration.AssertConfigurationsValid()。不过我还是得到了同样的例外。谢谢你的提示。它实际上是
Mapper.Configuration.AssertConfigurationsValid()。然而,我仍然得到同样的例外。