处理此问题的最佳方法是使用依赖注入(也称为控制反转或 IOC)和自定义 IControllerFactory,以便自动创建和处置您的存储库。这是一篇解释如何做到这一点的文章:
ASP.NET MVC 中的依赖注入:控制器
对于 MVC3,您可能会发现一些文章建议使用 IDependencyResolver,但您应该谨慎,因为该接口没有 Release 回调并且会导致内存泄漏(取决于您决定使用哪个 IOC 容器)。
如果您是 Dependency Injection 的新手,请在网络上搜索一些关于其背后想法的文章。
如果您不想切换到使用 IOC,则可以使用覆盖 OnActionExecuted 方法并处理所有 IDisposables 的基本控制器。例如:
abstract class DisposingController : Controller
{
protected IList<IDisposable> Disposables;
protected DisposingController()
{
Disposables = new List<IDisposable>();
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
foreach (var disposable in Disposables)
{
disposable.Dispose();
}
base.OnActionExecuted(filterContext);
}
}
然后在你的控制器中:
var myRepository = new MyRepository();
Disposables.Add(myRepository);