所以我有这门课
public static class MyClass
{
static MyClass()
{
...
}
}它没有方法、字段或属性。它所做的就是将处理程序连接到其他地方定义的静态事件。
因为Type初始化程序从未被调用,因为静态类从未被实际访问过,所以事件不会被连接起来。
因此,我希望能够通过反射ala typeof(MyClass).TypeInitializer().Invoke(...)调用类型初始化器,但有一个例外,说明MyClass是一个抽象类。
最终,应用程序将拥有与业务规则相对应的格式相同的其他静态类。在将任何内容保存到DB之前,会触发与所保存对象的类型相对应的静态事件。因此,如果我想做的事情最终是不可能的,那么任何重构建议都必须遵循这种结构。
编辑
我可能不太清楚我到底想做什么。基本上,我有一个数据层,您可以在其中初始化一个DataContext的实例,然后当调用SubmitChanges()时,我检查插入/更新/删除的ChangeSet,并为每个被插入/更新/删除的类型触发静态事件。这一切都很好,我只是在寻找一种方法,连接处理程序的事件,一旦应用程序启动。所以我玩的是这个:
static DataContext()
{
System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == 'Data.Business')
.ToList()
.ForEach( t => {
// invoke the static TypeInitializer here,
// so that it can wire up it's event handlers.
});
}我可以使用静态Initialize方法,但是由于这些方法只应该初始化一次,所以我认为是TypeInitializer。
编辑2
我读过MEF,这确实为我想做的事情提供了一种方式。
发布于 2010-09-19 19:59:51
为什么不创建一个静态方法,即Initialize(),将所有事件处理程序连接起来,只调用MyClass.Initialize()
发布于 2010-09-19 21:03:42
可以使用RuntimeHelpers.RunClassConstructor方法运行静态构造函数:
RuntimeHelpers.RunClassConstructor(typeof(MyClass).TypeHandle);但是我强烈建议用另一种方法来解决你的问题.理查德·海因的建议对我来说似乎很好。
发布于 2010-10-16 13:01:51
在代码中进行以下更正:
RuntimeHelpers.RunClassConstructor(typeof(MyClass).TypeHandle); https://stackoverflow.com/questions/3747215
复制相似问题