2013-06-22 30 views
0

我有以下界面插件:插件接口的初始化方法是否有代碼異味?

public interface IPlugin 
{ 
    IInitializedPlugin Initialize(PluginInitialization pluginInitialization); 
} 

應用程序可以獲得IPlugin實例(在這種情況下,IOC容器),但得到IInitializedPlugin比如,它必須調用Initialize方法。 PluginInitialization是一個簡單的插件配置結構。然後IInitializedPlugin具有實際的插件功能。這個設計如何改進?

+1

這與Java無關。 –

+1

你可以稍微改變一下設計(實際上,它不會像_renames_類型那樣更改設計),因此消費者提供了一個產生IPlugin的IPluginFactory。工廠有一個'Create'方法,它需要一個'IPluginConfiguration'對象並返回一個實例化/初始化的'IPlugin'對象。 –

+0

@ChrisSinclair - IPluginFactory,Create和IPlugin當然是更好的名字,謝謝。 – Pol

回答

0

嗯,你的設計可以肯定的工作,PRISM(桌面應用程序框架由微軟)使用類似的方法來初始化模塊,不過如果你使用的是.NET的發展,我會考慮使用MEF(託管擴展性框架)因爲使用某個IoC容器會將插件與特定容器耦合在一起,所以您可以通過閱讀Mark Seemann中的第四條評論來了解更多信息,如Article

+0

爲避免依賴插件中的依賴注入容器,MEF並不是必需的。馬克塞曼總是很好的閱讀,謝謝你的鏈接。 – Pol