private Expression ReplacePlaceHoldersWithOverriddenParameters(Expression expression) { if (this.overriddenParameters != null) { foreach (var overriddenParameter in this.overriddenParameters.Values) { expression = SubExpressionReplacer.Replace( expressionToAlter: expression, nodeToFind: overriddenParameter.PlaceHolder, replacementNode: overriddenParameter.Expression); } } return(expression); }
private Func <object, object> BuildDelegate() { PropertyInfo[] propertiesToInject = this.GetInjectableProperties(); var dummyExpression = Expression.Constant(null, this.Type); var propertyInjectionExpression = PropertyInjectionHelper.BuildPropertyInjectionExpression( this.container, this.Type, propertiesToInject, dummyExpression); var parameter = Expression.Parameter(typeof(object)); propertyInjectionExpression = SubExpressionReplacer.Replace( expressionToAlter: propertyInjectionExpression, subExpressionToFind: dummyExpression, replacementExpression: Expression.Convert(parameter, this.Type)); return(Expression.Lambda <Func <object, object> >(propertyInjectionExpression, parameter).Compile()); }