我不知道這是否是一個適當的問題要問,因爲它是非常具體的,但無論如何...創建一個谷歌實驗室般的擴展功能
在這個應用中我的工作,我有一個基於static events的擴展系統。 整個想法主要來自BlogEngine.NET中創建的(非常酷的)擴展系統。
本質上,在Application_Start
上創建一個擴展實例,該擴展實例掛接到應用程序中的類上的靜態事件。
以一個擴展名爲例,它將黑名單中的文字從論壇消息中刪除,然後再將其顯示到頁面上;當觸發ForumMessage.OnDisplaying
事件時,擴展程序將採用ForumMessage
發件人對象並用黑白字體替換黑名單中的單詞。
實施例:
static class WordBlackListExtension {
private static string[] _blacklist = new string[] { ... };
static WordBlacklistExtension() { ForumMessage.OnDisplaying += DoWork; }
private static void DoWork(object sender, EventArgs e) {
// Do some blacklist filtering...
((ForumMessage)sender).Body = ...;
}
}
然而,因爲僅存在一個在App域每個延伸的情況下,它發生在我的系統中這僅適用那裏有一個單,系統範圍的配置每個擴展名爲。
但是如果我希望每個論壇或每個用戶都能控制這些擴展程序,例如Google實驗室?每個論壇黑名單,或每個用戶啓用/禁用擴展的能力?
我將不得不將其他信息傳遞給擴展。所以這裏是我無法包裹頭部的部分 - 假設我有一個相當複雜的對象模型(因此,像ForumMessage.Forum.etc.Config
這樣做是不好的做法);
你會如何建議將這些信息傳遞給每個擴展?
每個擴展應該檢索自己的配置嗎?也許通過EventArgs傳遞某種上下文對象?
我在哪裏可以確定哪個論壇的配置要檢索?
你能想到這種類型的系統更好的設計嗎?
編輯
誰能推薦關於插件系統的任何閱讀材料?
任何特別在網絡環境中的東西將不勝感激。