private Expression CreateConstructorParameterExpression(ConstructorParameterMap ctorParamMap)
        {
            var resolvedExpression = ResolveSource(ctorParamMap);
            var resolvedValue      = Variable(resolvedExpression.Type, "resolvedValue");

            return(Block(new[] { resolvedValue },
                         Assign(resolvedValue, resolvedExpression),
                         MapExpression(_configurationProvider, _typeMap.Profile, new TypePair(resolvedExpression.Type, ctorParamMap.DestinationType), resolvedValue, Context)));
        }
예제 #2
0
 private Expression ResolveSource(ConstructorParameterMap ctorParamMap)
 {
     if (ctorParamMap.CustomExpression != null)
     {
         return(ctorParamMap.CustomExpression.ConvertReplaceParameters(Source)
                .NullCheck(ctorParamMap.DestinationType));
     }
     if (ctorParamMap.CustomValueResolver != null)
     {
         return(ctorParamMap.CustomValueResolver.ConvertReplaceParameters(Source, Context));
     }
     if (ctorParamMap.Parameter.IsOptional)
     {
         ctorParamMap.DefaultValue = true;
         return(Constant(ctorParamMap.Parameter.GetDefaultValue(), ctorParamMap.Parameter.ParameterType));
     }
     return(Chain(ctorParamMap.SourceMembers, ctorParamMap.DestinationType));
 }
예제 #3
0
 private Expression ResolveSource(ConstructorParameterMap ctorParamMap)
 {
     if (ctorParamMap.CustomExpression != null)
     {
         return(ctorParamMap.CustomExpression.ConvertReplaceParameters(Source)
                .IfNotNull(ctorParamMap.DestinationType));
     }
     if (ctorParamMap.CustomValueResolver != null)
     {
         return(ctorParamMap.CustomValueResolver.ConvertReplaceParameters(Source, Context));
     }
     if (ctorParamMap.Parameter.IsOptional)
     {
         ctorParamMap.DefaultValue = true;
         return(Constant(ctorParamMap.Parameter.GetDefaultValue(), ctorParamMap.Parameter.ParameterType));
     }
     return(ctorParamMap.SourceMembers.Aggregate(
                (Expression)Source,
                (inner, getter) => getter is MethodInfo
                 ? Call(getter.IsStatic() ? null : inner, (MethodInfo)getter)
                 : (Expression)MakeMemberAccess(getter.IsStatic() ? null : inner, getter)
                )
            .IfNotNull(ctorParamMap.DestinationType));
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
                                                                 ConstructorParameterMap propertyMap)
 => ExpressionResolutionResult(expressionResolutionResult, propertyMap.SourceMembers);
예제 #5
0
 public bool CanGetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult, ConstructorParameterMap propertyMap)
 {
     throw new NotImplementedException();
 }
 public bool CanGetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
     ConstructorParameterMap propertyMap)
 {
     return false;
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
     ConstructorParameterMap propertyMap)
 {
     return ExpressionResolutionResult(expressionResolutionResult, null);
 }
예제 #8
0
 public bool CanGetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
                                              ConstructorParameterMap propertyMap) => false;
예제 #9
0
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
                                                                 ConstructorParameterMap propertyMap, IValueResolver valueResolver)
 {
     throw new NotImplementedException();
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
                                                                 ConstructorParameterMap propertyMap, IValueResolver valueResolver)
 {
     return(ExpressionResolutionResult(expressionResolutionResult, null));
 }
 public bool CanGetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult, ConstructorParameterMap propertyMap)
 {
     return propertyMap.SourceMembers.Any();
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
     ConstructorParameterMap propertyMap)
 {
     return ExpressionResolutionResult(expressionResolutionResult, propertyMap.SourceMembers);
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
     ConstructorParameterMap propertyMap, IValueResolver valueResolver)
 {
     return ExpressionResolutionResult(expressionResolutionResult, valueResolver);
 }
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
     ConstructorParameterMap propertyMap)
 {
     throw new NotImplementedException();
 }
 public bool CanGetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult, ConstructorParameterMap propertyMap)
 => propertyMap.SourceMembers.Any();
예제 #16
0
 public ExpressionResolutionResult GetExpressionResolutionResult(ExpressionResolutionResult expressionResolutionResult,
                                                                 ConstructorParameterMap propertyMap) => ExpressionResolutionResult(expressionResolutionResult, null);
예제 #17
0
 public ConstructorParameterMap(ConstructorParameterMap parameterMap, IncludedMember includedMember) :
     this(includedMember.TypeMap, parameterMap.Parameter, parameterMap._sourceMembers, parameterMap.CanResolveValue) =>