Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制调用静态构造函数_C#_Static Constructor - Fatal编程技术网

C# 强制调用静态构造函数

C# 强制调用静态构造函数,c#,static-constructor,C#,Static Constructor,我有一个中心服务(在一个非常大的在线系统中),在这里,类注册为“foo”,提供者。当系统需要获取一些foos时,会调用所有注册的提供者。我的问题是,使类注册本身的自然位置是在静态构造函数中;但是静态构造函数只有在调用该类的一部分时才会被调用 static Widdler() { FooManager.RegisterProvider(() => GetMyFoos()); } 但这可能在一段时间内不会发生——课程提供其他服务;它们可能被大量或少量使用 我能以某种方式强制这些静态构造

我有一个中心服务(在一个非常大的在线系统中),在这里,类注册为“foo”,提供者。当系统需要获取一些foos时,会调用所有注册的提供者。我的问题是,使类注册本身的自然位置是在静态构造函数中;但是静态构造函数只有在调用该类的一部分时才会被调用

static Widdler()
{
   FooManager.RegisterProvider(() => GetMyFoos());
}
但这可能在一段时间内不会发生——课程提供其他服务;它们可能被大量或少量使用

我能以某种方式强制这些静态构造吗

有人能想出更好的办法吗?(这些不是动态加载的插件——在这种情况下,作为加载的一部分,我将检查它们是否有一些接口,如IFooProvider)


编辑:确定-我无法控制何时调用构造函数。我应该用什么来代替?我的中央服务部并不直接了解这些提供商。因此,调用“init”函数未启用。我试着把酒吧子模型想象成一辆事件巴士,但这不一样。“订阅者”需要在需要某些东西时呼叫“发布者”(而不是在发生某些事情时被呼叫)

通常解决此问题的方法是使用Unity之类的框架,并让它取代您的
RegisterProvider

您要做的是让unity搜索在您通过“”系统指定的程序集中实现
IFooProvider
的所有类,并将自动加载它们


然后在代码中,您需要一个实现
IFooProvider
的所有类的列表,您只需调用它,它就会返回一个
IEnumerable
,其中包含它检测到的实现接口的所有类。

在我看来,类不应该自己注册,注册它们应该是其他人的工作。也许是“食品经理”。