强制调用静态构造函数

时间:2014-07-15 18:18:15

标签: c# static-constructor

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

static Widdler()
{
   FooManager.RegisterProvider(() => GetMyFoos());
}

但这可能不会发生一段时间 - 课程提供其他服务;它们可能会被使用很多或者一点点。

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

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

编辑:好的 - 我无法控制何时调用构造函数。我应该用什么呢?我的中心服务不直接了解这些提供商。所以调用'init'函数不会打开。我试图想象一个像事件总线一样的pub子模型,但这不一样。 “订阅者”需要在需要时调用“发布者”(而不是在发生某些事情时调用)

1 个答案:

答案 0 :(得分:0)

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

您要做的是通过" Registration by Convention"对您在指定的程序集中实现IFooProvider的所有类进行统一搜索。系统并将自动加载它们。

然后在您需要实现IFooProvider的所有类的列表的代码中,您只需调用container.ResolveAll<IFooProvider>,它将返回它检测到的实现接口的所有类的IEnumerable<IFooProvider>