我的项目是使用MVC5,EF6和Ninject。
我有一些服务类组成业务层,只允许它们访问DbContext,这意味着控制器不能直接访问上下文。
服务类如下:
kernel.Bind<MyContext>().ToSelf().InRequestScope();
kernel.Bind<IService1>().To<Service1>().InRequestScope();
kernel.Bind<IService2>().To<Service2>().InRequestScope();
在Ninject中,CreateKernel初始化如下:
public class MyController : Controller
{
private readonly IService1 _service1;
private readonly IService2 _service2;
public MyController(IService1 service1, IService2 service2)
{
_service1 = service1;
_service2 = service2;
}
public ActionResult SomeAction()
{
var data1 = _service1.GetSomeData("");
var data2 = _service2.GetSomeData("");
[...]
return View();
}
}
在控制器中:
export
我注意到,对于Controller / SomeAction的每个请求,MyContext构造函数只调用一次,但dispose()将被调用两次。这让我想到了我的糟糕设计。 我试图从服务中删除 context.Dispose(); ,但这导致MyContext.dispose永远不会被调用,但是为每个请求生成了一个新实例。 有人可以指出我做错了什么吗?
谢谢!