【问题标题】:Using a static property inside a Scoped service在 Scoped 服务中使用静态属性
【发布时间】:2019-11-15 12:35:39
【问题描述】:

我在我的启动中将服务添加到 IServiceCollection 作为 Scoped:

    public void ConfigureServices(IServiceCollection services)
    {
          services.AddScoped<IEmailService, EmailService>();
    }

如果我要在我的 EmailService 实现中添加一个静态属性,这是否意味着即使我的 EmailService 在我的请求结束后超出范围,我的属性也不会被垃圾收集并保留在内存中?

我正在查看一些具有包含不记名令牌的静态属性的代码。似乎这个令牌一旦设置就会保留在内存中并一直存在,直到我的 AppPool 一天后刷新。

【问题讨论】:

  • 就像 Jon Skeet 所说的那样,静态成员与实例无关,它们与类型相关。
  • 您可以拥有一个单例服务来保存您的重要配置值(或机密)并将其注入您的作用域服务中。没有理由使用依赖注入/控制反转的静态字段或属性(containers9
  • 谢谢,我不这么认为。我将遵循您的方法。谢谢曾。

标签: c# asp.net-core dependency-injection static


【解决方案1】:

这是否意味着即使我的 EmailService 在我的请求结束后超出范围,我的属性也不会被垃圾收集并保留在内存中?

是的

here:

“静态成员与类型相关联,该类型与加载它的 AppDomain 相关联。请注意,[甚至]不必有任何实例......要初始化的类”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2019-08-02
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多