0

所以我的基本控制器带有一个继承的用户定义控制器,并从 Db 调用

public class HomeController : MyAppController
{
    public ActionResult Index()
    {
        string name = Db.Users.First().Name;
        return Content(name);
    }
}

在用户定义的控制器内部,我们有

public class MyAppController : Controller
{
    public FooEntities Db { get; set; }

    public MyAppController() {
        Db = new FooEntities();
    }
}

现在我听说这种方法可能会导致内存泄漏。我怎样才能保留这种方法并避免上述缺点?

4

1 回答 1

3

您可能需要处理上下文:

public class MyAppController : Controller
{
    public FooEntities Db { get; set; }

    public MyAppController() 
    {
        Db = new FooEntities();
    }

    protected override void Dispose(bool disposing)
    { 
        this.Db.Dispose();
        base.Dispose(disposing);
    }
}

但是,如果您正确地做事并使用抽象(而不是将您的数据库上下文的特定实例硬编码到控制器构造函数中),那么您的依赖注入框架有责任控制您的上下文的生命周期。理想情况下,它们应该是每个请求。在这种情况下,您的控制器代码将如下所示:

public class MyAppController : Controller
{
    protected IUnitOfWork UoW { get; private set; }

    public MyAppController(IUnitOfWork uow) 
    {
        this.UoW = uow;
    }
}
于 2013-06-14T09:13:59.613 回答