之前已经多次询问过这个问题,但对于我的生活,我无法让Ninject处理InRequestScope的服务。我查看了所有答案,其中大部分都告诉用户使用Ninject.MVC3
或OnePerRequestHttpModule
。我正在使用Ninject.MVC5
。
以下是如何到达我的位置:
使用VS2013
为项目添加界面:
public interface IBlah : IDisposable
{
void DoSomething();
}
为界面添加实现:
public class Blah : IBlah
{
private static int _count;
public Blah()
{
_count++;
Debug.WriteLine("Blah nr {0} created", _count);
}
public void DoSomething()
{
Debug.WriteLine("DoSomething called");
}
public void Dispose()
{
_count--;
Debug.WriteLine("Blah disposed. Still left {0}", _count);
}
}
打开家庭控制器并添加以下ivar和构造函数:
private readonly IBlah _blah;
public HomeController(IBlah blah)
{
_blah = blah;
}
将以下内容添加到Index
操作:
_blah.DoSomething();
打开NinjectWebCommon并将以下行添加到RegisterServices
方法
kernel.Bind<IBlah>().To<Blah>().InRequestScope();
调试项目并查看您将看到的Debug输出(在系统消息中)
"Blah nr 1 created"
"DoSomething called"
在浏览器中点击刷新,您将看到
"Blah nr 2 created"
"DoSomething called"
处理时没有任何输出,Dispose中的断点也永远不会被击中。
我可以在此处下载我的测试解决方案:http://www.upload.ee/files/4044477/NinjectTest.zip.html
我到底做错了什么???
更新2014年5月15日
现在有一个新版本(3.2.2)的Ninject.Web.Common
包可用于NuGet修复了该错误。
答案 0 :(得分:2)
我建议这与此ninject问题有关: https://github.com/ninject/ninject/issues/132#issuecomment-42459686
答案 1 :(得分:0)