【问题标题】:Is it correct aspnetcore way? Service & Dependency Injection它是正确的 aspnetcore 方式吗?服务和依赖注入
【发布时间】: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&lt;T&gt;() 将返回 null。因此,如果您的服务确实需要记录器,请使用 GetRequiredService&lt;T&gt;()
  • 假设一个缓存由一个数据库系统支持,第二个缓存由另一个支持

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2019-11-29
    • 2017-08-02
    相关资源
    最近更新 更多