2012-08-07 30 views
1

我正在嘗試編寫應用程序的插件。我唯一提供的是一個dll資源文件,它定義了一個接口;下面的代碼:C#插件實現查詢

using System; 
using System.Drawing; 

namespace App.Plugin.Resources.Interface 
{ 
    public interface IAppPlugin 
    { 
    string Name { get; set; } 

    string Description { get; set; } 

    string Author { get; set; } 

    string Version { get; set; } 

    Icon MenuIcon { get; set; } 

    EventHandler PluginEventHandler { get; set; } 
    } 
} 

然後我創建了一個實現了這個接口的類,使它顯示一個消息框,編譯DLL,把它放在應用程序的插件文件夾,當應用程序執行,並推出了插件,它確實顯示了該消息。

在我看來,該軟件提供了執行外部代碼(通過插件系統)的手段,但實際上並不允許訪問任何應用程序的屬性或方法。

考慮到上述情況,我的問題是:我能否以任何其他方式與主機進程交互(例如,當選擇菜單項時獲得通知,或者甚至自己將菜單項添加到主GUI)給定的資源或這個插件系統只是作爲一個應用程序啓動器(通過執行我提供的DLL中的代碼)?

+0

您是否嘗試過在您的PluginEventHandler實現中進行突破?我會從這裏開始,看看它是否被調用了什麼數據。 – 2012-08-07 11:52:40

+0

你插入什麼應用程序? – 2012-08-07 11:53:12

+1

我會問那個讓你插入應用程序的人 - 沒有告訴我們這是我們不太可能知道的應用程序;-) – Bridge 2012-08-07 11:54:15

回答

2

這似乎只是一個應用程序啓動,而不是一個真正的插件,除非有一些策略,按照約定執行:也許是應用着眼於與反射插件構造,以及一些接口傳送到主機系統,或者它看起來一些屬性標記有一些自定義屬性以通過某些入口點。另一個可能的車輛通過主要應用程序入口點是PluginEventHandler,嘗試在調試中看到您在調用插件時收到的內容。另外,嘗試用ILspy的一些工具來查看插件實例化中是否還有更多東西。

+0

在做了一些更多的研究並根據在這裏收到的建議採取行動之後,我最終聯繫了開發人員,並確認它實際上只是代碼執行程序,沒有其他任何內容。所以是的,你是對的,這只是一個應用程序啓動器,而不是一個真正的插件。謝謝你們。 – IneedHelp 2012-08-07 14:08:39