C# 强制调用静态构造函数
我有一个中心服务(在一个非常大的在线系统中),在这里,类注册为“foo”,提供者。当系统需要获取一些foos时,会调用所有注册的提供者。我的问题是,使类注册本身的自然位置是在静态构造函数中;但是静态构造函数只有在调用该类的一部分时才会被调用C# 强制调用静态构造函数,c#,static-constructor,C#,Static Constructor,我有一个中心服务(在一个非常大的在线系统中),在这里,类注册为“foo”,提供者。当系统需要获取一些foos时,会调用所有注册的提供者。我的问题是,使类注册本身的自然位置是在静态构造函数中;但是静态构造函数只有在调用该类的一部分时才会被调用 static Widdler() { FooManager.RegisterProvider(() => GetMyFoos()); } 但这可能在一段时间内不会发生——课程提供其他服务;它们可能被大量或少量使用 我能以某种方式强制这些静态构造
static Widdler()
{
FooManager.RegisterProvider(() => GetMyFoos());
}
但这可能在一段时间内不会发生——课程提供其他服务;它们可能被大量或少量使用
我能以某种方式强制这些静态构造吗
有人能想出更好的办法吗?(这些不是动态加载的插件——在这种情况下,作为加载的一部分,我将检查它们是否有一些接口,如IFooProvider)
编辑:确定-我无法控制何时调用构造函数。我应该用什么来代替?我的中央服务部并不直接了解这些提供商。因此,调用“init”函数未启用。我试着把酒吧子模型想象成一辆事件巴士,但这不一样。“订阅者”需要在需要某些东西时呼叫“发布者”(而不是在发生某些事情时被呼叫)通常解决此问题的方法是使用Unity之类的框架,并让它取代您的
RegisterProvider
您要做的是让unity搜索在您通过“”系统指定的程序集中实现IFooProvider
的所有类,并将自动加载它们
然后在代码中,您需要一个实现
IFooProvider
的所有类的列表,您只需调用它,它就会返回一个IEnumerable
,其中包含它检测到的实现接口的所有类。在我看来,类不应该自己注册,注册它们应该是其他人的工作。也许是“食品经理”。