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
相关产品推荐
相关产品推荐

