所以我有這個類調用通過反射靜態類型初始化也許
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