C# 自动映射自定义内联映射

C# 自动映射自定义内联映射,c#,api,loops,dictionary,automapper,C#,Api,Loops,Dictionary,Automapper,我有两节课 public class SourceClass { public Guid Id { get; set; } public Guid Provider { get; set; } } public class DestinationClass { public Guid Id { get; set; } public Guid Provider { get; set; } public Guid CustomerId {get; set

我有两节课

 public class SourceClass
{
    public Guid Id { get; set; }
    public Guid Provider { get; set; }
}


public class DestinationClass
{
    public Guid Id { get; set; }
    public Guid Provider { get; set; }
    public Guid CustomerId {get; set;}
}
我已经使用以下代码初始化了映射

CreateMap<SourceClass, DestinationClass>();
CreateMap();
然后在我的控制器中,我有:

Mapper.Map<List<DestinationClass>>(requests)
Mapper.Map(请求)
其中“requests”是传入控制器的SourceClass对象列表

现在,此代码可以正常工作,映射也可以按配置正常工作。但是,我也通过了CustomerId,并希望相应地在DestinationClass中设置它


当映射发生时,有没有办法做到这一点,这样我就不必编写额外的循环来在列表中的每个对象中设置CustomerId?

您可以通过将
键值
传递给映射器来传递额外的参数(如@LucianBargaoanu所建议的)。自定义值解析器和映射执行可以实现为:

// Configuration 
var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<SourceClass, DestinationClass>()
      .ForMember(dest => dest.CustomerId, opt => 
      opt.MapFrom((src, dest, destMember, context) =>
      context.Items["CustomerId"]));
});

var mapper = configuration.CreateMapper();

//Sample source class
var sourceClass = new SourceClass { Id = Guid.NewGuid(), Provider = Guid.NewGuid() };

var destClass = mapper.Map<SourceClass, DestinationClass>(sourceClass,
              opt => opt.Items["CustomerId"] = "96b4b6e6-7937-4579-ba01-4a051bc0b93b");
//配置
var配置=新的MapperConfiguration(cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.CustomerId,opt=>
opt.MapFrom((src、dest、destMember、context)=>
context.Items[“CustomerId”]);
});
var mapper=configuration.CreateMapper();
//示例源类
var sourceClass=newsourceclass{Id=Guid.NewGuid(),Provider=Guid.NewGuid()};
var destClass=mapper.Map(sourceClass,
选项=>选项项[“客户ID”]=“96b4b6e6-7937-4579-ba01-4a051bc0b93b”);
destClass
对象的
CustomerId
成员由传递的GUID填充


注意:
SourceClass
DestinationClass
定义取自OP.

它在没有
Guid的情况下工作。Parse
ToString
。只需
context.Items[“CustomerId”]
@LucianBargaoanu谢谢。你说得对。我编辑了anser以删除冗余解析。因为我已经存储了
string
,所以我已经显式地强制转换到
Guid
@blazerix。如果您可以传递您的实际表达式,那么我将尝试提供帮助。