这是正确的aspnetcore方式吗?服务与发展依赖注入

时间:2017-02-13 23:27:28

标签: asp.net dependency-injection asp.net-core

所以我想创建一些访问外部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会给我相同的对象,就像我从另一个服务请求它一样,它们必须分开

1 个答案:

答案 0 :(得分:1)

这听起来像你可以使用代理或装饰模式。基本问题是您有一个服务可以进行一些数据访问,另一个服务负责缓存第一个服务的结果。我意识到你没有使用存储库本身,但是CachedRepository模式应该可以满足你的需求。见这里:

http://ardalis.com/introducing-the-cachedrepository-patternhttp://ardalis.com/building-a-cachedrepository-via-strategy-pattern

如果您不需要设计的那部分灵活,您可以编写缓存的实现,以便在其构造函数中接收实际的SomeApi类型。