将参数传递给实现 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".
我正在使用和实现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".