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));
            }