我有抽象的BaseController,基本上如下所示:
public abstract class BaseController : Controller
{
public IDisposable Resource { get; protected set; }
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if(Resource != null)
{
Resource.Dispose();
}
var baseController = filterContext.Controller as BaseController;
if (baseController != null && baseController.Resource != null)
{
baseController.Resource.Dispose();
}
}
}
在OnActionExecuted事件中,我想处理Resource对象。是否足以执行资源上的Dispose?我还必须从filterContext检查Controller中的资源吗?
在我的情况下,在调试器中,这是同一个对象,但是它总是相同的吗?它用于什么?
答案 0 :(得分:1)
如果仍然相同,则将为每个请求(ASP.NET MVC Controller Lifecycle)构建控制器。然后,您可以将资源置于控制器的部署中(ASP MVC: When is IController Dispose() called?)
答案 1 :(得分:1)
这是同一个对象。 Controller
属性在操作过滤器中非常有用 - 它们在ActionExecutedContext
中也会获得OnActionExecuted
- 并且您不在控制器中。