2010-08-11 65 views
0

我正在嘗試創建一個這樣的插件體系結構;
IPlugin:所有插件必須實現的接口。
NormalPlugin:一個普通的插件。
ComplexPlugin:一個插件,除了實現基本方法外,還有一些自定義方法。
HostApp:知道IPlugin是什麼的應用程序。在c中的定義/實現問題#

當前宿主應用程序在編譯時將具有ComplexPlugin,並且會動態加載NormalPlugin。這是因爲主機需要在ComplexPlugin中定義所以可以調用它的自定義方法。
1)有沒有更好的方法來實現這個目標?因爲在編譯時添加一些插件作爲參考主機應用程序看起來有點跛腳。

2)我試着使用:

public interface IPlugin 
{ 
    object CallCustomMethod(string methodName, object[] parameters); 
} 
但儘管如此,如果CallCustomMethod返回一個複合型,應用程序將需要知道複雜類型強制轉換爲。 在此先感謝

+1

http://stackoverflow.com/questions/3329399/best-practices-for-implementing-an-addin-addon-plugin-strategy – zerkms 2010-08-11 22:29:09

回答

0

如果應用程序從未通過CallCustomMethod函數調用ComplexPlugIn的自定義方法,那麼在我看來,您應該永遠不需要投射到ComplexPlugIn。 IPlugIn foo =(IPlugIn)myComplexObject.CallCustomMethod(「GenerateNewComplexPlugIn」,new object [] {0});
foo.CallCustomMethod(「AnotherComplexMethod」,null);

+0

感謝您的答案。 我的問題是關於瞭解CallCustomMethod的返回類型。它可能會返回ComplexPlugin中定義的ComplexData類/結構。我試圖在宿主應用程序中編寫相同類型的ComplexData。但是當我嘗試將其轉換爲編譯器時說:「無法將ComplexData類型轉換爲ComplexData」:) – Slantroph 2010-08-12 00:14:17

+0

可以通過在獨立類庫中定義ComplexData並在HostApp和ComplexPlugIn中包含對此庫的引用來解決此特定問題。從插件與主機應用程序分離的角度來看,這似乎是有意義的,這似乎是使用插件的全部目的。 不知道「大圖」很難說總體方法是好還是壞...... – Andrew 2010-08-12 01:40:22

+0

謝謝安德魯。您的建議看起來像是解決問題的最佳解決方案。 – Slantroph 2010-08-12 02:10:36