如何实现非延迟触发的静态构造函数以自动注册派生处理器类
如何让派生处理器类自动注册到基类静态表?
我有一批继承自同一基类的处理器类,希望每个处理器能自动注册到基类的静态字典里。一开始想用静态构造函数实现,但静态构造函数是超级延迟加载的——因为我从不直接引用这些派生类(全程通过基类的Handler表操作),导致静态构造函数根本不会触发。
下面是极简示例代码:
public abstract class BlahBase { public static readonly Dictionary<string, Type> Handlers = new(); public static BlahBase FindHandler(string name) { // 从Handlers表查找并返回实例给调用方 if (Handlers.TryGetValue(name, out var handlerType)) { return (BlahBase)Activator.CreateInstance(handlerType); } return null; } // 其他逻辑 } public class BlahFooHandler : BlahBase { static BlahFooHandler() { BlahBase.Handlers.Add("foo", typeof(BlahFooHandler)); } // 其他逻辑 } public class BlahBarHandler : BlahBase { static BlahBarHandler() { BlahBase.Handlers.Add("bar", typeof(BlahBarHandler)); } // 其他逻辑 }
原本指望BlahFooHandler和BlahBarHandler的静态构造函数自动把自己注册到基类的Handlers表,但必须直接操作派生类才会触发构造函数,没法实现完全动态的注册效果。
我查了很多关于静态构造函数的资料,大部分都是围绕延迟加载的问题,而我需要的是非延迟触发的行为。我知道可以用反射或者给每个处理器加特性的方案,但想问问有没有更直接的C#语言特性能实现这个需求?
内容的提问来源于stack exchange,提问作者Steve Friedl
相关产品推荐
相关产品推荐

