我一直在寻找使用.NET 4.0缓存功能或通过第三方抽象接口(如this one)在存储库级实现缓存,我刚遇到一个问题,我将不得不支持两个用例。
我的应用程序可能分为多个区域,例如Admin区域和User前端(网站前端)。我不希望在管理区域中进行任何缓存,管理员应始终向他们显示最新刷新的数据。
现在,我是否必须重构所有存储库方法以接受参数是否返回缓存结果?还有其他选择吗?
答案 0 :(得分:1)
您可以在控制器级别执行缓存,而不是在存储库中执行缓存。这样在管理区域控制器中,您将始终查询存储库以获取新数据,而在其他控制器中,您将缓存结果。如果您绝对需要在存储库层执行对象的缓存,则需要一个附加参数来指示是否从Admin区域进行调用。或者您也可以使用诸如NInject之类的DI框架,它允许您将参数从HttpContext传递到每个请求生命周期分配的依赖项。因此,您可以将area
RouteData参数注入存储库的构造函数。
答案 1 :(得分:0)
由于您使用的是ASP.NET,因此可以应用各种级别的缓存。如果我们已经把轮子重新发明,我就不会重新发明它。
我们有:
[OutputCache]
)[OutputCache]
)实体框架或其他ORM也可以执行缓存。所以我会说使用已有的东西,直到你确定它没有做你需要的东西。
如果您必须在存储库中执行此操作,我建议使用依赖注入功能注入正确的存储库(一个具有缓存或无缓存)