使用ninject进行MVC DBContext管理

时间:2017-06-27 07:27:39

标签: c# asp.net-mvc entity-framework ninject ninject.web.mvc

我的项目是使用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永远不会被调用,但是为每个请求生成了一个新实例。 有人可以指出我做错了什么吗?

谢谢!

0 个答案:

没有答案