public SingleContextValueValueInjector( LambdaExpression lambda, MappingConfigInfo configInfo, RequiredValuesSet requiredValues) : base(lambda, configInfo) { _lambdaBody = lambda.Body; if (requiredValues.Includes(Source)) { _value = requiredValues.Source; _replacementFactory = ctx => ctx.GetSourceAccess(); return; } if (requiredValues.Includes(Target)) { _value = requiredValues.Target; _replacementFactory = ctx => ctx.GetTargetAccess(); return; } if (requiredValues.Includes(ElementIndex)) { _value = requiredValues.ElementIndex; _replacementFactory = ctx => ctx.GetElementIndex(); } if (requiredValues.Includes(CreatedObject)) { _value = requiredValues.CreatedObject; _replacementFactory = ctx => ctx.GetCreatedObject(); return; } if (requiredValues.Includes(ElementKey)) { _value = requiredValues.ElementKey; _replacementFactory = ctx => ctx.GetElementKey(); return; } if (requiredValues.Includes(Parent)) { _value = requiredValues.Parent; _replacementFactory = ctx => ctx.GetParentAccess(); } }
public override Expression Inject(Type[] contextTypes, IMemberMapperData mapperData) { var replacements = _isInvocation ? FixedSizeExpressionReplacementDictionary.WithEqualKeys(RequiredValuesCount) : FixedSizeExpressionReplacementDictionary.WithEquivalentKeys(RequiredValuesCount); var context = CreateContext(contextTypes, mapperData); if (_requiredValues.Includes(MappingContext)) { replacements.Add(_requiredValues.MappingContext, context.GetMappingDataAccess()); } if (_requiredValues.Includes(Source)) { replacements.Add(_requiredValues.Source, context.GetSourceAccess()); } if (_requiredValues.Includes(Target)) { replacements.Add(_requiredValues.Target, context.GetTargetAccess()); } if (_requiredValues.Includes(CreatedObject)) { replacements.Add(_requiredValues.CreatedObject, context.GetCreatedObject()); } if (_requiredValues.Includes(ElementIndex)) { replacements.Add(_requiredValues.ElementIndex, context.GetElementIndex()); } if (_requiredValues.Includes(ElementKey)) { replacements.Add(_requiredValues.ElementKey, context.GetElementKey()); } return(_lambdaBody.Replace(replacements)); }