尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

AddMemoryCacheSetup 实现思想笔记

发布时间:2026/9/22 7:30:50

资讯中心
01
ARTICLE

AddMemoryCacheSetup 实现思想笔记

AddMemoryCacheSetup 实现思想笔记
### 一、核心设计思想AddMemoryCacheSetup 采用了 接口隔离 依赖注入 策略模式 的组合设计实现了缓存功能的解耦和可扩展性注册1: ICaching → MemoryCaching (Scoped)注册2: IMemoryCache (Singleton)### 三、设计原则解析 1. 接口隔离原则ISP问题 .NET 内置的 IMemoryCache 接口功能强大但复杂业务代码只需简单的 Get/Set 操作。解决方案 定义简化的 ICaching 接口只暴露业务需要的方法。// 简化的业务接口 public interface ICaching { object Get(string cacheKey); void Set(string cacheKey, object cacheValue, int timeSpan); }2. 依赖注入DI问题 MemoryCaching 需要底层的 IMemoryCache 来存储数据。解决方案 通过构造函数注入 IMemoryCache 由 DI 容器自动解析依赖。public class MemoryCaching : ICaching { private readonly IMemoryCache _cache; public MemoryCaching(IMemoryCache cache) // 构造函数注入 { _cache cache; } }3. 生命周期管理为什么需要两种生命周期ICaching → MemoryCaching Scoped 操作类无状态每个请求独立IMemoryCache Singleton 数据容器需要全局共享缓存数据- MemoryCaching 是工具每个请求可以有自己的工具- IMemoryCache 是仓库所有请求共享同一个仓库- 如果两者都是 Scoped缓存数据会被隔离失去意义- 如果两者都是 Singleton可能存在线程安全问题// 内存缓存 services.AddScopedICaching, MemoryCaching(); // 切换到 Redis只需改一行 services.AddScopedICaching, RedisCaching();public static void AddMemoryCacheSetup(this IServiceCollection services) { services.AddScopedICaching, MemoryCaching(); // 业务接口注册 services.AddSingletonIMemoryCache(factory // 底层缓存注册 { var cache new MemoryCache(new MemoryCacheOptions()); return cache; }); }public class MemoryCaching : ICaching { private readonly IMemoryCache _cache; public MemoryCaching(IMemoryCache cache) { _cache cache; } public object Get(string cacheKey) { return _cache.Get(cacheKey); } public void Set(string cacheKey, object cacheValue, int timeSpan) { _cache.Set(cacheKey, cacheValue, TimeSpan.FromSeconds(timeSpan * 60)); } }
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。