C# 将参数传递到实现IMappingAction的类中
我正在使用和实现接口,但在使用它时需要传递一个参数。 这是我能做的吗C# 将参数传递到实现IMappingAction的类中,c#,.net,automapper,C#,.net,Automapper,我正在使用和实现接口,但在使用它时需要传递一个参数。 这是我能做的吗 public class AfterMapAction : IMappingAction<SourceClass, DestinationClass> { public void Process( SourceClass source, DestinationClass destination, ResolutionContext context) {
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
public类aftermappaction:IMappingAction
{
公共无效程序(
SourceClass源,
目的地类目的地,
决议(上下文)
{
destination.Name=PassedParameterName
}
}
CreateMap()
.AfterMap()// 接口类似于契约,因此无论在接口中定义什么,都必须在类中实现,因此,如果接口中没有包含参数的方法定义,则不能在其中输入参数
当然,如果您不想违背合同义务,那么在这种情况下,法律官员(编译器)有话要说……您可以使用ResolutionContext
将参数(name-value
pair)传递给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".
//使用上下文的AfterMap操作函数
公共类AfterMapAction:ImapingAction
{
公共作废流程(源、目标、,
决议(上下文)
{
destination.Name=context.Items[“YourVal”].ToString();
}
}
//配置声明
var配置=新的MapperConfiguration(cfg=>
{
cfg.CreateMap()
.AfterMap();
});
var mapper=configuration.CreateMapper();
//传递实际参数值,例如“实际名称”
var result=mapper.Map(源,opt=>
选项项[“YourVal”]=“实际名称”);
//结果的名称为“ActualName”。
与DI相同或通过DI。