简单的注射器生活方式作为缓存解决方案

时间:2017-03-08 08:20:26

标签: c# .net caching dependency-injection simple-injector

我使用Simple Injector作为IoC容器来注入我的依赖项。目前我依赖一组主数据,并且构建此主数据的类被标记为单例,以避免频繁调用DB。

但这让我陷入困境,我无法使对象和新鲜数据无效。绝对时间缓存策略应该足以满足我当前的需求。

为了介绍缓存,我可以考虑以下方法

  1. 使用Decorator模式引入缓存层。
  2. 使用Interceptor引入缓存层。
  3. 使用Lifestyle钩子作为缓存解决方案(如here所述)。
  4. 我更倾向于选择#3。

    我希望得到一个专家意见,除了上面链接中提到的那个之外,它是否是正确的方法和可能的陷阱。

1 个答案:

答案 0 :(得分:2)

您不应该创建自己的自定义生活方式,因为:

  • 这意味着您正在缓存应用程序组件中的数据,这使得它们具有状态,这是您应该努力防止的。使组件成为无状态简化了开发,因为它使得更容易推理出这样的组件。
  • 正如您所指出的文档中所述,给定的“绝对过期”生活方式可能会带来麻烦,因为“即使锁定用于同步访问,这种自定义生活方式可能无法正常工作,因为到期时间在解析对象图时传递。“这个问题可能很难解决。

我会说装饰器方法会产生最好的效果。在这里,装饰器不应该保持缓存本身(因为这将使其成为有状态和可变的,而是将其委托给外部服务,如MemCache或者可能是绑定到请求或会话的东西。