【发布时间】:2014-07-24 00:38:07
【问题描述】:
我最初使用了一些我发现的自定义代码来处理 Web API 中的依赖关系解析,并且效果很好。我遇到的问题是我想将过滤器绑定到我的控制器范围,就像使用 MVC 一样。例如,Kernel.BindFilter。新的 Ninject.We.WebApi 包具有我想要的绑定扩展,但是一旦我将它添加到我的项目中,我就会收到以下错误。我没有更改任何代码,只是引用了一个 DLL。
使用从 IFilterProvider 绑定到激活 IFilterProvider 时出错 DefaultFilterProvider 在 两个服务的构造函数。
激活路径:3)将依赖IFilterProvider注入到 类型构造函数的参数 defaultFilterProviders DefaultFilterProviders 2) 依赖注入 DefaultFilterProviders 变成构造函数的参数 filterProviders DefaultFilterProvider 类型 1) 请求 IFilterProvider
建议:1)确保您没有声明依赖 服务的任何实现上的 IFilterProvider。 2)考虑 将服务组合成一个服务以消除循环。 3) 使用 属性注入代替构造函数注入,并实现 如果您需要在之后运行初始化逻辑,则可初始化 属性值已被注入。
在 Ninject.Activation.Context.Resolve() 在 Ninject.KernelBase.c__DisplayClass15.b__f(IBinding 绑定) 在 System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b11.MoveNext() 在 System.Linq.Enumerable.d__142.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection)1 源)在 Ninject.Web.WebApi.Filter.DefaultFilterProvider.GetFilters(HttpConfiguration 配置,HttpActionDescriptor actionDescriptor)在 System.Web.Http.Controllers.HttpActionDescriptor.b__0(IFilterProvider fp) 在 System.Linq.Enumerable.d__14
at System.Linq.Enumerable.ToList[TSource](IEnumerable2.MoveNext() at System.Linq.Buffer1..ctor(IEnumerable1 source) at System.Linq.OrderedEnumerable1.d__0.MoveNext() 在 System.Linq.Buffer1..ctor(IEnumerable1 来源)在 System.Linq.Enumerable.d__a01.MoveNext() at System.Web.Http.Controllers.HttpActionDescriptor.<RemoveDuplicates>d__3.MoveNext() at System.Linq.Buffer1..ctor(IEnumerable1 source) at System.Linq.Enumerable.<ReverseIterator>d__a01.MoveNext() 在 System.Collections.Generic.List1..ctor(IEnumerable1 个集合)
在 System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at System.Web.Http.Controllers.HttpActionDescriptor.InitializeFilterPipeline() at System.Lazy1.CreateValue() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Lazy`1.get_Value() 在 System.Web.Http.Controllers.HttpActionDescriptor.GetFilterPipeline()
在 System.Web.Http.Controllers.HttpActionDescriptor.GetFilterGrouping()
在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext 控制器上下文,CancellationToken 取消令牌)在 System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage 请求,CancellationToken 取消令牌)在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()
【问题讨论】:
标签: ninject ninject-2 ninject-extensions