1

I have abstract BaseController, which basically looks like below:

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();
        }
    }
}

Inside OnActionExecuted event, I want to dispose Resource object. Is it enough to execute Dispose on Resource ? Do I have to check also for Resource in the Controller from filterContext ?

In debugger in my case that this is the same object, but is it always the same one ? What is it used for ?

jwaliszko
  • 16,942
  • 22
  • 92
  • 158

2 Answers2

1

If it is still the same your controller will be constructed for every request (ASP.NET MVC Controller Lifecycle). Then you could just dispose your resource in the dispose of your controller (ASP MVC: When is IController Dispose() called?)

Community
  • 1
  • 1
Mark van Straten
  • 9,287
  • 3
  • 38
  • 57
1

It is the same object. The Controller property can be useful in action filters - they also get an ActionExecutedContext in OnActionExecuted - and you're not in the controller there.

Jon
  • 16,212
  • 8
  • 50
  • 62