コード例 #1
0
        public Expression GetConditionOrNull(
            IMemberMapperData mapperData,
            CallbackPosition position,
            QualifiedMember targetMember)
        {
            if (!HasCondition)
            {
                return(null);
            }

            var condition = _conditionLambda.GetBody(mapperData, position, targetMember);

            if (_negateCondition)
            {
                condition = Expression.Not(condition);
            }

            var targetCanBeNull = position.IsPriorToObjectCreation(targetMember);

            var conditionNestedAccessesChecks = mapperData
                                                .GetExpressionInfoFor(condition, targetCanBeNull)
                                                .NestedAccessChecks;

            if (conditionNestedAccessesChecks != null)
            {
                condition = Expression.AndAlso(conditionNestedAccessesChecks, condition);
            }

            return(condition);
        }
コード例 #2
0
 public Expression GetCallbackOrNull(
     CallbackPosition position,
     IBasicMapperData basicData,
     IMemberMapperData mapperData)
 {
     return(_mappingCallbackFactories?.FirstOrDefault(f => f.AppliesTo(position, basicData))?.Create(mapperData));
 }
コード例 #3
0
 private static Expression GetPopulationCallbackOrEmpty(
     CallbackPosition position,
     IMemberPopulation memberPopulation,
     IObjectMappingData mappingData)
 {
     return(GetMappingCallbackOrNull(position, memberPopulation.MapperData, mappingData.MapperData));
 }
コード例 #4
0
 protected static Expression GetMappingCallbackOrNull(
     CallbackPosition callbackPosition,
     IBasicMapperData basicData,
     IMemberMapperData mapperData)
 {
     return(mapperData.MapperContext.UserConfigurations.GetCallbackOrNull(callbackPosition, basicData, mapperData));
 }
コード例 #5
0
 private static Expression GetPopulationCallbackOrNull(
     CallbackPosition position,
     IMemberPopulator memberPopulator,
     IObjectMappingData mappingData)
 {
     return(memberPopulator.MapperData.GetMappingCallbackOrNull(position, mappingData.MapperData));
 }
コード例 #6
0
 public CallbackSpecifier(
     MappingConfigInfo configInfo,
     CallbackPosition callbackPosition,
     QualifiedMember targetMember)
     : base(callbackPosition, configInfo)
 {
     _targetMember = targetMember;
 }
コード例 #7
0
        public Expression GetCreationCallbackOrNull(CallbackPosition position, IMemberMapperData mapperData)
        {
            if (_creationCallbackFactories.None())
            {
                return(null);
            }

            return(_creationCallbackFactories.FirstOrDefault(f => f.AppliesTo(position, mapperData))?.Create(mapperData));
        }
コード例 #8
0
 public ObjectCreationCallbackFactory(
     MappingConfigInfo configInfo,
     Type creationTargetType,
     CallbackPosition callbackPosition,
     ConfiguredLambdaInfo callbackLambda)
     : base(configInfo, callbackPosition, callbackLambda, QualifiedMember.All)
 {
     _creationTargetType = creationTargetType;
 }
コード例 #9
0
        public static bool IsPriorToObjectCreation(this CallbackPosition position, QualifiedMember targetMember)
        {
            if (position != CallbackPosition.Before)
            {
                return(false);
            }

            return((targetMember == QualifiedMember.All) || (targetMember == QualifiedMember.None));
        }
コード例 #10
0
 public MappingCallbackFactory(
     MappingConfigInfo configInfo,
     CallbackPosition callbackPosition,
     ConfiguredLambdaInfo callbackLambda,
     QualifiedMember targetMember)
     : base(configInfo, targetMember)
 {
     CallbackPosition = callbackPosition;
     _callbackLambda  = callbackLambda;
 }
コード例 #11
0
 public CallbackSpecifier(
     MapperContext mapperContext,
     CallbackPosition callbackPosition,
     QualifiedMember targetMember)
     : this(
         MappingConfigInfo.AllRuleSetsAndSourceTypes(mapperContext).ForTargetType <TTarget>(),
         callbackPosition,
         targetMember)
 {
 }
コード例 #12
0
        public Expression GetConditionOrNull(
            IMemberMapperData mapperData,
            CallbackPosition position,
            QualifiedMember targetMember)
        {
            if (!HasCondition)
            {
                return(GetTypeCheckConditionOrNull(mapperData));
            }

            var condition = _conditionLambda.GetBody(mapperData, position, targetMember);

            if (_negateCondition)
            {
                condition = Expression.Not(condition);
            }

            var targetCanBeNull = position.IsPriorToObjectCreation(targetMember);

            var conditionNestedAccessesChecks = mapperData
                                                .GetNestedAccessesIn(condition, targetCanBeNull)
                                                .GetIsNotDefaultComparisonsOrNull();

            if (conditionNestedAccessesChecks != null)
            {
                condition = Expression.AndAlso(conditionNestedAccessesChecks, condition);
            }

            var typeCheck = GetTypeCheckConditionOrNull(mapperData);

            if (typeCheck != null)
            {
                condition = Expression.AndAlso(typeCheck, condition);
            }

            return(condition);
        }
コード例 #13
0
 protected CallbackSpecifierBase(CallbackPosition callbackPosition, MappingConfigInfo configInfo)
 {
     CallbackPosition = callbackPosition;
     ConfigInfo       = configInfo;
 }
コード例 #14
0
 public virtual bool AppliesTo(CallbackPosition callbackPosition, IBasicMapperData mapperData)
 => (CallbackPosition == callbackPosition) && base.AppliesTo(mapperData);
コード例 #15
0
        protected override Expression GetConditionOrNull(IMemberMapperData mapperData, CallbackPosition position)
        {
            mapperData.Context.UsesMappingDataObjectAsParameter =
                ConfigInfo.ConditionUsesMappingDataObjectParameter;

            return(base.GetConditionOrNull(mapperData, position));
        }
コード例 #16
0
 public InstanceCreationCallbackSpecifier(CallbackPosition callbackPosition, MapperContext mapperContext)
     : this(callbackPosition, MappingConfigInfo.AllRuleSetsAndSourceTypes(mapperContext).ForTargetType <TTarget>())
 {
 }
コード例 #17
0
 public InstanceCreationCallbackSpecifier(CallbackPosition callbackPosition, MappingConfigInfo configInfo)
     : base(callbackPosition, configInfo)
 {
 }
コード例 #18
0
 public Expression GetCreationCallbackOrNull(CallbackPosition position, IMemberMapperData mapperData)
 => _creationCallbackFactories?.FirstOrDefault(f => f.AppliesTo(position, mapperData))?.Create(mapperData);
コード例 #19
0
 internal EventConfigStartingPointBase(MappingConfigInfo configInfo, CallbackPosition callbackPosition)
 {
     _configInfo       = configInfo;
     _callbackPosition = callbackPosition;
 }
コード例 #20
0
        protected override Expression GetConditionOrNull(IMemberMapperData mapperData, CallbackPosition position)
        {
            var condition = base.GetConditionOrNull(mapperData, position);

            if ((CallbackPosition != CallbackPosition.After) || mapperData.TargetMemberIsUserStruct())
            {
                return(condition);
            }

            var newObjectHasBeenCreated = mapperData.CreatedObject.GetIsNotDefaultComparison();

            if (condition == null)
            {
                return(newObjectHasBeenCreated);
            }

            return(Expression.AndAlso(newObjectHasBeenCreated, condition));
        }
コード例 #21
0
 public override bool AppliesTo(CallbackPosition callbackPosition, IBasicMapperData mapperData)
 => mapperData.TargetMember.Type.IsAssignableTo(_creationTargetType) && base.AppliesTo(callbackPosition, mapperData);
コード例 #22
0
 protected virtual Expression GetConditionOrNull(IMemberMapperData mapperData, CallbackPosition position)
 => ConfigInfo.GetConditionOrNull(mapperData, position, TargetMember);
コード例 #23
0
 private static Expression GetCreationCallbackOrNull(CallbackPosition callbackPosition, IMemberMapperData mapperData)
 => mapperData.MapperContext.UserConfigurations.GetCreationCallbackOrNull(callbackPosition, mapperData);