我已将 Ninject 配置为在 ASP.NET MVC 3 应用程序中执行 DI。这工作正常,它将正确的类注入到我的控制器中。
当我尝试添加 Ninject.Extensions.Interception 以使用我的应用程序时,我开始收到一个模棱两可的匹配异常。这只发生在我添加 Ninject.Extensions.Interception.DynamicProxy 程序集时。如果我删除这个程序集,那么它会再次运行良好。我还参考了 Ninject.Extensions.Intereception 和 Castle.Core。
请注意,我没有在应用程序中配置拦截。我只是添加一个参考,这个错误开始发生。
我正在使用 Ninject 2.2.1.0 和 Ninject.Extensions.Interception 2.2.0.0。
private const BindingFlags DefaultBindingFlags =
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance;
public static PropertyInfo GetPropertyFromMethod( this MethodInfo method, Type implementingType )
{
if ( !method.IsSpecialName )
{
return null;
}
return implementingType.GetProperty( method.Name.Substring( 4 ), DefaultBindingFlags );
}
堆栈跟踪:
[AmbiguousMatchException:找到不明确的匹配项。]
System.RuntimeType.GetPropertyImpl(字符串名称,BindingFlags bindingAttr,Binder binder,Type returnType,Type[] 类型,ParameterModifier[] 修饰符)+9402677 System.Type.GetProperty(String name,BindingFlags bindingAttr) +31
C:\Projects\Ninject\ninject.extensions.interception\src\Ninject.Extensions.Interception\Infrastructure\Language\ExtensionsForMethodInfo.cs 中的 Ninject.Extensions.Interception.Infrastructure.Language.ExtensionsForMethodInfo.GetPropertyFromMethod(MethodInfo 方法,类型 implementationType): 35 Ninject.Extensions.Interception.Planning.Strategies.InterceptorRegistrationStrategy.Execute(IPlan 计划) 在 c:\Projects\Ninject\ninject.extensions.interception\src\Ninject.Extensions.Interception\Planning\Strategies\InterceptorRegistrationStrategy.cs:83 Ninject .Planning.<> c_DisplayClass3.b _1(IPlanningStrategy s) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Planner.cs:68 Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map(IEnumerable1 series, Action
1 个动作)在 c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:23 Ninject.Planning.Planner.GetPlan(Type type) in c:\Projects\Ninject\ninject\src\Ninject \Planning\Planner.cs:68 Ninject.Activation.Providers.StandardProvider.Create(IContext context) 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:74 Ninject.Activation.Context。 Resolve() 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:157 Ninject.KernelBase.b__7(IContext context) 在 c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs :375