.net AutoMapper执行替换源对象的函数

nx7onnlm  于 2023-07-01  发布在  .NET
关注(0)|答案(2)|浏览(120)

我有这个类:

public class Policy
{
    // some members
   
    public Policy GetEffective()
    {
          // run some logic
          return mergedPolicy;
    }
}

我想使用AutoMapper将这种类型的对象Map到另一种类型,但在Map它们之前,请调用此方法,并用此方法返回的对象替换源。
我尝试使用BeforeMap方法,但它似乎不能在整个源代码上工作,只能在源成员上工作。

CreateMap<Policy, PolicyResponse>()
                .BeforeMap((src, dest) => src = src.GetEffective());
92dk7w1h

92dk7w1h1#

只需MapGetEffective的结果

_mapper.Map<PolicyResponse>(policy.GetEffective());
更新:

为了获得调用GetEffective的Map,我建议让GetEffective返回一个不同的类型。为GetEffectivePolicyResponse的返回类型创建一个Map配置文件,然后在PolicyPolicyResponse的Map定义中使用ConstructUsing

CreateMap<EffectivePolicy, PolicyResponse>();
 
CreateMap<Policy, PolicyResponse>()
   .ConstructUsing((policy, context) => context.Mapper.Map<PolicyResponse>(policy.GetEffective(policy)));
e7arh2l6

e7arh2l62#

我有一个解决方案,可以为您使用反射将值分配给src

CreateMap<c1, c2>()
    .BeforeMap((src, dest) =>
    {
        var effective= src.GetEffective();
        var props = effective.GetType().GetProperties();
        foreach (var prop in props)
            prop.SetValue(src, prop.GetValue(effective));
    });

相关问题