所以我有这个类调用通过反射静态类型初始化也许
public static class MyClass
{
static MyClass()
{
...
}
}
其中有没有方法,字段或属性。它所做的就是将处理程序连接到其他地方定义的静态事件。
由于Type初始值设定项永远不会被调用,因为静态类永远不会被实际访问,所以事件不会被连接起来。
所以我希望能够通过反射ala typeof(MyClass).TypeInitializer().Invoke(...)
调用类型初始值设定项,但有个例外说明MyClass
是一个抽象类。
最终,应用程序将有其他静态类具有相同的业务规则格式。在将任何内容保存到数据库之前,会触发对应于正在保存的对象类型的静态事件。因此,如果我想要做的事情最终不可能实现,那么任何重构建议都必须遵循该结构。
编辑:
我可能不是很清楚的正是我试图做的。基本上我有一个数据层,在这里你可以初始化一个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阅读起来,这确实提供了一种方法做我想做的事。
你有没有想过,这只是一个非常糟糕/不可行的设计? – x0n 2010-09-19 20:06:55
什么是糟糕的设计?业务层?我应该把业务规则放在表示层吗?还是你的意思是静态的?我只是想,为整个数据层注册一组事件比为每个数据上下文创建一组新事件更有效。 – 2010-09-19 20:24:57