在 ForMember() 中声明一个变量

本文关键字:一个 变量 ForMember 声明 | 更新日期: 2023-09-27 17:55:19

我想声明 2 个变量,所以我可以转换这段代码:

Mapper.CreateMap<SourceClass, DestinationClass>().ForMember(
    destination => destination.destinationValue, source =>
        source.Condition(resolutionContext =>
            (resolutionContext.InstanceCache.First().Value as DestinationClass).destinationValue2 != null && (resolutionContext.InstanceCache.First().Value as DestinationClass).destinationValue2.Value != ((SourceClass)resolutionContext.Parent.sourceValue).sourceValue2  
            ||
            (resolutionContext.InstanceCache.First().Value as DestinationClass).destinationValue3 != null && (resolutionContext.InstanceCache.First().Value as DestinationClass).destinationValue3.Value != ((SourceClass)resolutionContext.Parent.sourceValue).sourceValue3                                                                          
        ));

进入这个:

Mapper.CreateMap<SourceClass, DestinationClass>().ForMember(
    var sourceObject = ((SourceClass)resolutionContext.Parent.sourceValue);
    var destinationObject = (resolutionContext.InstanceCache.First().Value as DestinationClass);
    destination => destination.destinationValue, source =>
        source.Condition(resolutionContext =>
            destinationObject.destinationValue2 != null && destinationObject.destinationValue2.Value != sourceObject.sourceValue2  
            ||
            destinationObject.destinationValue3 != null && destinationObject.destinationValue3.Value != sourceObject.sourceValue3                                                                          
        ));

我该怎么做?

在 ForMember() 中声明一个变量

我认为这是一种反模式,因为映射器应该是愚蠢的,因此您可能希望抵制在其中放置太多逻辑的诱惑。查询缓存是域实现的责任。

也许您应该丰富要从中映射的域对象,而不是尝试在映射过程中添加缺少的验证和信息。