You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#函数应用中Transient服务内部static class的实例化疑问

问题解答

首先明确核心点:C#里的静态类本身不能被实例化,它的所有成员都是类级别的全局共享资源,和包含它的外部类的实例数量完全无关。

针对你的场景:

  • 你注册的MyCoolService是Transient服务,每次注入确实会生成新的MyCoolService实例,这部分没问题。
  • 但MyCoolService内部的静态类,不管外部MyCoolService被实例化多少次,这个静态类的静态成员在整个应用程序域里只会有一份内存空间。所有MyCoolService的实例访问这个静态类的成员时,操作的都是同一份数据,不会因为外部类的新实例而产生独立的静态类“副本”。

举个直观的代码例子:

public class MyCoolService : IMyCoolService
{
    public static class MyStaticClass
    {
        public static int InstanceCounter = 0;
    }

    public MyCoolService()
    {
        // 每次创建MyCoolService实例时,都会累加同一个计数器
        MyStaticClass.InstanceCounter++;
    }
}

假设你注入了5次IMyCoolService,那么MyStaticClass.InstanceCounter的值会变成5——所有MyCoolService实例共用这个计数器,不会每个实例对应一个单独的计数器。

简单总结:Transient服务每次实例化时,其内部的静态类不会产生新的独立版本,所有外部类实例共享同一个静态类的成员。

内容的提问来源于stack exchange,提问作者MikeSmith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:48:34