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

如何实现非延迟触发的静态构造函数以自动注册派生处理器类

如何让派生处理器类自动注册到基类静态表?

我有一批继承自同一基类的处理器类,希望每个处理器能自动注册到基类的静态字典里。一开始想用静态构造函数实现,但静态构造函数是超级延迟加载的——因为我从不直接引用这些派生类(全程通过基类的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:30:41