我的控制器继承自一个包含实现 IDisposable 的字段的类。所以我的第一反应是写:
public abstract class EventRepositoryControllerBase : Controller
{
protected EventRepository eventRepos { get; private set; }
public EventRepositoryControllerBase(EventRepository eventRepos)
{
this.eventRepos = eventRepos;
}
public override void Dispose()
{
try
{
base.Dispose();
}
finally
{
eventRepos.Dispose();
}
}
}
但这不会编译,因为 Controller 没有将 Dispose 方法标记为虚拟/覆盖。所以现在我想我被困住了。即使我将我的方法标记为新方法,框架是否不会保存类型为 Controller 的引用,因此我的方法将永远不会被调用?有关如何解决此问题的建议?
更新
所以我查看了 MVC3 源代码并看到了这个:
public void Dispose() {
Dispose(true /* disposing */);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
}
所以我想我会把我的代码放在第二种方法中。不确定这种行为是否是合同规定的。