将参数传递给实现 IMappingAction 的 class

Pass a parameter into a class that implements IMappingAction

我正在使用和实现IMappingAction接口,但在使用时需要传递一个参数。 这是我能做的事吗?

public class AfterMapAction : IMappingAction<SourceClass, DestinationClass>
{
    public void Process(
        SourceClass source,
        DestinationClass destination,
        ResolutionContext context)
    {
        destination.Name = PassedParameterName
    }
}

CreateMap<SourceClass, DestinationClass>()
                .AfterMap<AfterMapAction>(); //<== Where do I pass the parameter

接口就像合同,所以无论在接口中定义什么,它都必须在class中实现,所以,如果接口没有带有参数的方法定义,那么你不能在那里输入参数。

那是如果你不想违背你的合同义务,当然,在这种情况下,法律官员(编译者)有话要说...

您可以使用 ResolutionContext 将参数(name-value 对)传递给 AfterMap 操作函数。

方法如下:

// AfterMap Action function that usages context
public class AfterMapAction : IMappingAction<Source, Destination>
{
    public void Process(Source source, Destination destination, 
                                       ResolutionContext context)
    {
        destination.Name = context.Items["YourVal"].ToString();
    }
}


//Configuration declaration
var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Destination>()
      .AfterMap<AfterMapAction>();
});

var mapper = configuration.CreateMapper();    

//Pass actual parameter value e.g. "ActualName" 
var result = mapper.Map<Source, Destination>(source, opt => 
                       opt.Items["YourVal"] = "ActualName");

// The result will have Name as "ActualName".