user1228
user1228

Reputation:

Has using the HttpRuntime.Cache changed in ASP.NET MVC?

So, I was looking over my standard cache utility when preparing to unit test a controller and thought, hey, is accessing the HttpRuntime.Cache directly considered harmful in MVC?

I wrap the cache in a proxy class that implements a cache-like interface (tho much simpler) so that I can mock it during tests. But I'm wondering if that's already done for me in the new framework. I can't find anything, however.

Here's an idea of how I do it:

public ActionResult DoStuffLol(guid id)
{
  var model = CacheUtil.GetOrCreateAndStore(
                  "DoStuffLolModel",
                  () =>
                  {
                    /* construct model here; time consuming stuff */
                    return model;
                  });
  return View("DoStuffLol", model);
}

So, has the old patterns of accessing the cache changed? Are there any better patterns for caching action results in MVC?

Upvotes: 1

Views: 2215

Answers (2)

user1228
user1228

Reputation:

No, but the cache has changed in 3.5. 3.5 includes wrapper classes that make stubbing/mocking many of the static classes used in asp.net easy.

http://www.codethinked.com/post/2008/12/04/Using-SystemWebAbstractions-in-Your-WebForms-Apps.aspx

Upvotes: 0

Craig Stuntz
Craig Stuntz

Reputation: 126547

Add the OutputCache attribute to your controller action in order to tell the framework to cache the output for you. You can read more about this attribute in ScottGu's blog post on ASP.NET Preview 4.

Don't combine this with the Authorize attribute, however.

Upvotes: 1

Related Questions