Ejemplo n.º 1
0
        public IEnumerable <Expression> GetParametersExpressions(IBuildContext buildContext)
        {
            for (var parameterPosition = 0; parameterPosition < _parametersExpressions.Length; parameterPosition++)
            {
                var param = _parameters[parameterPosition];
                if (param.IsOut)
                {
                    if (param.ParameterType.HasElementType)
                    {
                        var type = param.ParameterType.GetElementType();
                        if (type != null)
                        {
                            var outParam = Expression.Parameter(type);
                            buildContext.AddParameter(outParam);
                            yield return(outParam);

                            continue;
                        }
                    }
                }

                var expression = _parametersExpressions[parameterPosition];
                if (expression != null)
                {
                    yield return(expression);
                }
                else
                {
                    var        key = new Key(param.ParameterType);
                    Expression defaultExpression;
                    if (param.IsOptional)
                    {
                        if (param.DefaultValue == null)
                        {
                            defaultExpression = Expression.Default(param.ParameterType);
                        }
                        else
                        {
                            defaultExpression = Expression.Constant(param.DefaultValue);
                        }
                    }
                    else
                    {
                        defaultExpression = null;
                    }

                    yield return(buildContext.CreateChild(key, buildContext.Container).CreateExpression(defaultExpression));
                }
            }
        }