有选择地缓存存储库对象或数据结果

时间:2012-03-23 12:21:41

标签: asp.net-mvc caching .net-4.0 repository

我一直在寻找使用.NET 4.0缓存功能或通过第三方抽象接口(如this one)在存储库级实现缓存,我刚遇到一个问题,我将不得不支持两个用例。

我的应用程序可能分为多个区域,例如Admin区域和User前端(网站前端)。我不希望在管理区域中进行任何缓存,管理员应始终向他们显示最新刷新的数据。

现在,我是否必须重构所有存储库方法以接受参数是否返回缓存结果?还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

您可以在控制器级别执行缓存,而不是在存储库中执行缓存。这样在管理区域控制器中,您将始终查询存储库以获取新数据,而在其他控制器中,您将缓存结果。如果您绝对需要在存储库层执行对象的缓存,则需要一个附加参数来指示是否从Admin区域进行调用。或者您也可以使用诸如NInject之类的DI框架,它允许您将参数从HttpContext传递到每个请求生命周期分配的依赖项。因此,您可以将area RouteData参数注入存储库的构造函数。

答案 1 :(得分:0)

由于您使用的是ASP.NET,因此可以应用各种级别的缓存。如果我们已经把轮子重新发明,我就不会重新发明它。

我们有:

  • ASP.NET服务器缓存
  • 服务器上的ASP.NET输出缓存(在操作上使用[OutputCache]
  • 客户端上的ASP.NET输出缓存(在操作上使用[OutputCache]

实体框架或其他ORM也可以执行缓存。所以我会说使用已有的东西,直到你确定它没有做你需要的东西。


更新

如果您必须在存储库中执行此操作,我建议使用依赖注入功能注入正确的存储库(一个具有缓存或无缓存)