[ninject commit] r143 - in experiments/ninject2/src/Ninject: . Injection/Linq

2 views
Skip to first unread message

codesite...@google.com

unread,
Feb 14, 2009, 2:11:27 PM2/14/09
to ninje...@googlegroups.com
Author: nkohari
Date: Sat Feb 14 11:10:16 2009
New Revision: 143

Added:

experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectionExpressionHelper.cs
- copied, changed from r142,
/experiments/ninject2/src/Ninject/Injection/Linq/VoidMethodInjector.cs
Modified:
experiments/ninject2/src/Ninject/Injection/Linq/ConstructorInjector.cs
experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectorBase.cs
experiments/ninject2/src/Ninject/Ninject.csproj

Log:


Modified:
experiments/ninject2/src/Ninject/Injection/Linq/ConstructorInjector.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Injection/Linq/ConstructorInjector.cs
(original)
+++ experiments/ninject2/src/Ninject/Injection/Linq/ConstructorInjector.cs
Sat Feb 14 11:10:16 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
#endregion
@@ -51,21 +52,12 @@
/// <returns>The constructed expression tree.</returns>
protected override Expression<Func<object[], object>>
BuildExpression(ConstructorInfo member)
{
- ParameterExpression argumentParameter =
Expression.Parameter(typeof(object[]), "arguments");
-
- ParameterInfo[] parameters = member.GetParameters();
- Expression[] arguments = new Expression[parameters.Length];
-
- for (int idx = 0; idx < parameters.Length; idx++)
- {
- arguments[idx] = Expression.Convert(
- Expression.ArrayIndex(argumentParameter, Expression.Constant(idx)),
- parameters[idx].ParameterType);
- }
+ ParameterExpression argumentsParameter =
Expression.Parameter(typeof(object[]), "arguments");
+ var arguments =
MethodInjectionExpressionHelper.CreateParameterExpressions(member,
argumentsParameter);

NewExpression newCall = Expression.New(member, arguments);

- return Expression.Lambda<Func<object[], object>>(newCall,
argumentParameter);
+ return Expression.Lambda<Func<object[], object>>(newCall,
argumentsParameter);
}
}
}

Copied:
experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectionExpressionHelper.cs
(from r142,
/experiments/ninject2/src/Ninject/Injection/Linq/VoidMethodInjector.cs)
==============================================================================
--- /experiments/ninject2/src/Ninject/Injection/Linq/VoidMethodInjector.cs
(original)
+++
experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectionExpressionHelper.cs
Sat Feb 14 11:10:16 2009
@@ -16,32 +16,21 @@
#endregion
#region Using Directives
using System;
+using System.Linq;
+using System.Linq.Expressions;
using System.Reflection;
#endregion

namespace Ninject.Injection.Linq
{
- /// <summary>
- /// A method injector that injects methods that return <see type="void"/>.
- /// </summary>
- public class VoidMethodInjector : MethodInjectorBase<Action<object,
object[]>>
+ internal static class MethodInjectionExpressionHelper
{
- /// <summary>
- /// Initializes a new instance of the <see cref="VoidMethodInjector"/>
class.
- /// </summary>
- /// <param name="method">The method that will be injected.</param>
- public VoidMethodInjector(MethodInfo method) : base(method) { }
-
- /// <summary>
- /// Calls the associated method, injecting the specified values.
- /// </summary>
- /// <param name="target">The target object on which to call the
method.</param>
- /// <param name="values">The values to inject.</param>
- /// <returns>The return value of the method, or <see langword="null"/>
if the method returns <see langword="void"/>.</returns>
- public override object Invoke(object target, object[] values)
+ public static Expression[] CreateParameterExpressions(MethodBase method,
Expression argumentArrayExpression)
{
- Callback.Invoke(target, values);
- return null;
+ return method.GetParameters().Select((parameter, index) =>
+ Expression.Convert(
+ Expression.ArrayIndex(argumentArrayExpression,
Expression.Constant(index)),
+ parameter.ParameterType)).ToArray();
}
}
}

Modified:
experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectorBase.cs
==============================================================================
--- experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectorBase.cs
(original)
+++ experiments/ninject2/src/Ninject/Injection/Linq/MethodInjectorBase.cs
Sat Feb 14 11:10:16 2009
@@ -16,6 +16,7 @@
#endregion
#region Using Directives
using System;
+using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
#endregion
@@ -53,21 +54,12 @@
ParameterExpression instanceParameter =
Expression.Parameter(typeof(object), "instance");
Expression instance = Expression.Convert(instanceParameter,
member.DeclaringType);

- ParameterExpression argumentParameter =
Expression.Parameter(typeof(object[]), "arguments");
-
- ParameterInfo[] parameters = member.GetParameters();
- Expression[] arguments = new Expression[parameters.Length];
-
- for (int idx = 0; idx < parameters.Length; idx++)
- {
- arguments[idx] = Expression.Convert(
- Expression.ArrayIndex(argumentParameter, Expression.Constant(idx)),
- parameters[idx].ParameterType);
- }
+ ParameterExpression argumentsParameter =
Expression.Parameter(typeof(object[]), "arguments");
+ var arguments =
MethodInjectionExpressionHelper.CreateParameterExpressions(member,
argumentsParameter);

MethodCallExpression call = Expression.Call(instance, member,
arguments);

- return Expression.Lambda<TDelegate>(call, instanceParameter,
argumentParameter);
+ return Expression.Lambda<TDelegate>(call, instanceParameter,
argumentsParameter);
}
}
}

Modified: experiments/ninject2/src/Ninject/Ninject.csproj
==============================================================================
--- experiments/ninject2/src/Ninject/Ninject.csproj (original)
+++ experiments/ninject2/src/Ninject/Ninject.csproj Sat Feb 14 11:10:16 2009
@@ -111,6 +111,7 @@
<Compile Include="ActivationException.cs" />
<Compile Include="Infrastructure\Language\ExtensionsForIDictionary.cs"
/>
<Compile Include="Infrastructure\Language\ExtensionsForIList.cs" />
+ <Compile Include="Injection\Linq\MethodInjectionExpressionHelper.cs" />
<Compile Include="Syntax\ModuleLoadExtensions.cs" />
<Compile Include="Events\BindingEventArgs.cs" />
<Compile Include="Events\ModuleEventArgs.cs" />

Reply all
Reply to author
Forward
0 new messages