我正在使用这篇文章让ninject与Asp.Net WebApi一起使用
http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/
这会破坏所有范围,例如InSingletonScope
编辑:答案在评论中
好的,我大部分都知道了。问题是NinjectResolver的 BeginScope方法返回一个新的NinjectScope传入 _kernel.BeginBlock()到构造函数。这将实例从绑定中声明的范围重新关联到 新的激活块。
因此,曾经作用于请求的内容现在是作用于 激活块。
为了解决这个问题,我改变了NinjectResolver:
public IDependencyScope BeginScope(){return new NinjectScope(_KERNEL); }
然后,为了防止NinjectScope处理内核本身,我 在NinjectScope的Dispose块中注释掉了所有内容。
据我所知,这不应该产生太大影响。内置 缓存和收集机制将像往常一样工作,轮询 GC并自动在缓存中处理实例。
我认为问题的核心是WebApi本身正在尝试 做每个请求范围管理的工作,但Ninject已经有 这样做的一种方式。两种不同的范围机制没有 似乎和睦相处。