2012-01-06 75 views
3

我來自一個PHP的背景,並使用WordPress的頗多,我愛怎麼他們插件架構作品和掛鉤事件到事件的能力名。我喜歡的最好的部分之一就是能夠在將數據庫值顯示給最終用戶之前,將* add_filter()*添加到任何數據庫值。我的問題是關於如何在C#.NET環境中複製整個插件體系結構的多部分內容?基於列表發佈在C#訂閱模式(WordPress的鉤/過濾器)

1部分: 要創建的插件我已經研究了MEF框架可能會是最好的(託管擴展性框架 -http://mef.codeplex.com/)。這是專門設計的,通過讓您監視新插件的目錄,跟蹤依賴關係和其他常規事情,從而完成繁瑣的工作。 MEF附帶.NET 3.5+

第2部分 掛鉤事件?我似乎無法找到有關複製基於全球渠道的事件系統的許多信息。從我到目前爲止,我需要一個發佈/訂閱模式(這不是很難做,因爲你只是創建一些具體的對象,並給他們的事件)。困難的部分是給每個事件一個'頻道'的名稱,並在整個系統中的所有事件成爲全球集合的一部分(調解員模式)。

要複製:(http://codex.wordpress.org/Function_Reference/add_filter)

實施例1

// Add's my button to the end of the content 
add_filter('the_content', 'my_plugin_button'); 

function my_plugin_button($content) { 
    // Add's my button to the end of the content 
    return $content . "<a href='#'>My button</a>"; 
} 

OR

實施例2

// Add a new admin menu item by hooking in 
add_action('admin_menu', 'my_plugin_menu'); 

function my_plugin_menu() { 
    add_options_page('My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options'); 
} 

我希望你們所有人都和我在一起嗎?我已成功地複製我需要在Javascript功能,甚至jQuery有其。對()事件函數...同樣的事情,但基於信道或列表...

我的2個例子:

任何人都可以點我在正確的方向或者這是C#中完全以錯誤的做法?

回答

0

我認爲NServiceBus可以幫助你很多這些問題。 Udi Dahan這是NServiceBus的作者也寫了很多關於域事件模式的文章,這是一個發佈/訂閱機制。

+0

感謝您的回覆Espen,但是我更傾向於開源解決方案或僅僅是基於列表的事件系統的簡單複製。任何人有任何想法? – Aaron 2012-01-10 09:04:30

0

知道已經很長時間,因爲你發佈了這個,你可能已經建立了一些東西。不過,我一直在想自己這樣的事情。有2個選項 - 真的忘了WordPress的,並嘗試建立一些更清潔 - 這是在WordPress的代碼底部的爛攤子:d

或者這樣:

function the_content() 
{ 
     var result = get_the_content(); 
     // do other stuff...if you want to. 
     execute_filters(ref result); 
     execute_actions(ref result); 

     return result; 
} 

function execute_filters(ref string result, string action_name) 
{ 
    var filters = get_pre_filters(action_name); 
    filters.ForEach(filter => 
    { 
     /// somehow call the method name in filter. PHP is generally global. C# namespaced,  
     /// so you would need to think about that. 
    } 
} 

function execute_actions(ref string result, string action_name) 
{ 
     /// and so on.... 
} 

當建立一些模仿的WordPress,你需要記住WordPress插件架構的許多問題(以我個人的觀點來看)......似乎想要在每個頁面上運行每個插件,即使該頁面與該插件無關。我特別安裝了一個插件,它爲每個頁面調用添加了60個數據庫查詢,並沒有使用它。

當你建造它時,試着去思考它。嘗試並添加一種方法,讓您的新設置的頁面/帖子上使用的插件可以運行,例如在你的數據庫中的post/page對象上有一個「Plugins」字段,並且允許在該頁面上運行插件列表。這樣你就不需要每次檢查所有的插件,看它是否要運行。

反正。希望你有一些工作。