【发布时间】:2017-02-13 23:27:28
【问题描述】:
所以我想创建一些访问外部 API 的服务,并且我想缓存来自该服务内部 API 的常见请求,它依赖于 3 个其他服务,但我想给它自己的缓存实例 MemoryDistributedCache以后可能会换成别的东西
services.AddSingleton<ISomeApi, SomeApi>(provider => new SomeApi(
Configuration.Get<Options>(),
new MemoryDistributedCache(new MemoryCache(new MemoryCacheOptions())),
provider.GetService<ILogger<SomeApi>>()
));
现在从我的控制器中我可以通过 DI 访问 api,它工作得很好,但我不确定它是否是某种反模式,或者是否有更好的方法来做到这一点
我的意思是真正的问题是分离内部缓存,请求 来自一个服务的 IDistributedMemory 会给我相同的对象,就像我从另一个服务请求它一样,它们必须分开
【问题讨论】:
-
为什么需要单独缓存?另外,请注意:如果未找到服务,
GetService<T>()将返回 null。因此,如果您的服务确实需要记录器,请使用GetRequiredService<T>()。 -
假设一个缓存由一个数据库系统支持,第二个缓存由另一个支持
标签: asp.net dependency-injection asp.net-core