MVC实际控制器vs filterContext.Controller

时间:2012-03-22 12:18:14

标签: asp.net-mvc asp.net-mvc-3

我有抽象的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中的资源吗?

在我的情况下,在调试器中,这是同一个对象,但是它总是相同的吗?它用于什么?

2 个答案:

答案 0 :(得分:1)

如果仍然相同,则将为每个请求(ASP.NET MVC Controller Lifecycle)构建控制器。然后,您可以将资源置于控制器的部署中(ASP MVC: When is IController Dispose() called?

答案 1 :(得分:1)

这是同一个对象。 Controller属性在操作过滤器中非常有用 - 它们在ActionExecutedContext中也会获得OnActionExecuted - 并且您不在控制器中。