oli*_*iwa 6 ninject ninject-2 ninject-extensions
我最初使用了一些自定义代码来处理Web API中的依赖项解析,它运行正常.我遇到的问题是我想将过滤器绑定到我的控制器范围,就像使用MVC一样.例如,Kernel.BindFilter.新的Ninject.We.WebApi包具有我想要的绑定扩展名,但是一旦我将它添加到我的项目中,我就会收到以下错误.我没有更改任何代码,只是引用DLL.
使用从IFilterProvider到DefaultFilterProvider的绑定激活IFilterProvider时出错在两个服务的构造函数之间检测到循环依赖.
激活路径:3)将依赖项IFilterProvider注入到DefaultFilterProviders类型的构造函数的参数defaultFilterProviders中2)将依赖项DefaultFilterProviders注入参数filterProviders类型为DefaultFilterProvider的构造函数1)请求IFilterProvider
建议:1)确保您未在任何服务实现上声明IFilterProvider的依赖项.2)考虑将服务组合成一个服务以消除周期.3)使用属性注入而不是构造函数注入,如果需要在注入属性值后运行初始化逻辑,则实现IInitializable.
at Ninject.Activation.Context.Resolve()at Ninject.KernelBase.<> c__DisplayClass15.b__f(IBinding binding)at System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b11.MoveNext()at System.Linq.Enumerable.d__142.MoveNext() at System.Collections.Generic.List1..ctor(在System.Linq.Enumerable.d__14 1的System.Web.Http.Controllers.HttpActionDescriptor.b__0(IFilterProvider fp)的Ninject.Web.WebApi.Filter.DefaultFilterProvider.GetFilters(HttpConfiguration配置,HttpActionDescriptor actionDescriptor)中有IEnumerable 1源码. ctor(在System.Linq.Buffer 1源上的IEnumerable 1.d__0.MoveNext())在System.Linq.Enumerable.d__a0 1..ctor(System.Collections.Generic.List 1集合中的IEnumerable 1.MoveNext()) at System.Linq.Enumerable.ToList [TSource](IEnumerable 1.CreateValue()---从抛出异常的先前位置开始的堆栈跟踪结束---在System.Lazy的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处`1.get_Value()在System.Web.Http.Controllers.HttpActionDescriptor.GetFilterPipeline() 在System.Web.Http.Controller System.Web.Http上System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage请求,CancellationToken cancellationToken)的System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken cancellationToken)中的s.HttpActionDescriptor.GetFilterGrouping(). Dispatcher.HttpControllerDispatcher.d__0.MoveNext()1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable2.MoveNext() at System.Linq.Buffer1 source) at System.Linq.OrderedEnumerable1..ctor(IEnumerable1.MoveNext() at System.Web.Http.Controllers.HttpActionDescriptor.<RemoveDuplicates>d__3.MoveNext() at System.Linq.Buffer1 source) at System.Linq.Enumerable.<ReverseIterator>d__a01..ctor(IEnumerable1 source) at System.Web.Http.Controllers.HttpActionDescriptor.InitializeFilterPipeline() at System.Lazy
小智 5
如果其他人正在寻找 IFilterProvider 循环依赖的潜在解决方案,我必须像这样显式绑定 DefaultFilterProviders
k.Bind<DefaultFilterProviders>().ToConstant(new DefaultFilterProviders(GlobalConfiguration.Configuration.Services.GetFilterProviders()));
Run Code Online (Sandbox Code Playgroud)
或这个
k.Bind<DefaultFilterProviders>().ToSelf().WithConstructorArgument(GlobalConfiguration.Configuration.Services.GetFilterProviders());
Run Code Online (Sandbox Code Playgroud)
如果其他人知道更好的方法,我很乐意听到。
| 归档时间: |
|
| 查看次数: |
2311 次 |
| 最近记录: |