gpt4 book ai didi

c# - 简单注入(inject)器的生活方式作为缓存解决方案

转载 作者:行者123 更新时间:2023-11-30 23:15:21 27 4
gpt4 key购买 nike

我使用 Simple Injector 作为 IoC 容器来注入(inject)我的依赖项。目前有一组我依赖的主数据,构建这个主数据的类被标记为单例以避免频繁调用数据库。

但这让我陷入了麻烦,因为我无法使新数据无效并反对新数据。绝对时间缓存策略应该可以满足我当前的需求。

为了引入缓存,我可以想到以下方法

  1. 使用装饰器模式引入缓存层。
  2. 使用拦截器引入缓存层。
  3. 使用 Lifestyle Hook 作为缓存解决方案(如 here 所述)。

我更倾向于选项 #3。

除了上述链接中提到的方法之外,我想就这是否是正确的方法以及可能存在的陷阱征求专家意见。

最佳答案

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

  • 这意味着您在应用程序组件中缓存数据,这使它们成为有状态的,这是您应该努力避免的事情。使组件无状态可以简化开发,因为这样更容易推理此类组件。
  • 正如您所指向的文档中已经指出的那样,给定的“绝对过期”生活方式可能会引起麻烦,因为“即使使用锁定来同步访问,这种自定义生活方式也可能无法按预期工作,因为当过期时间在解析对象图时通过。”这样的问题可能很难解决。

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

关于c# - 简单注入(inject)器的生活方式作为缓存解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com