2011-07-18 123 views
3

我在寫一個簡單的基於插件的程序。我有一個接口IPlugin,它有一些方法和功能,在我的主程序中有一個List<Plugin>。爲了簡便起見,可以說,它的定義是這樣的:C#創建DLL插件,實現接口

public interface IPlugin 
{ 
    public void OnKeyPressed(char key); 
} 

每次按下一個鍵,我依次通過插件列表,並呼籲他們每個人OnKeyPressed(c)

我可以創建一個類像這樣,並將其添加到列表...

public class PrintPlugin 
{ 
    public void OnKeyPressed(char key) 
    { 
     Console.WriteLine(c); 
    } 
} 

然後當你按下一個鍵,把它打印出來。但我希望能夠從DLL文件中加載插件。 This link很有幫助,但它不能解釋如何讓DLL中的類實現我的接口...我該怎麼做?我真的不希望有到IPlugin.cs文件我想打一個插件每次複製...

+0

你可以添加對你的庫的引用,因爲你可以使用你的插件接口。 – VMAtm

+0

我希望能夠在運行時加載它們,以便用戶可以創建自己的插件。 – Entity

+0

然後,您應該創建一個屬性,如「列表」,以便用戶可以將他們的插件添加到您的列表中。 – VMAtm

回答

5

如果我理解正確,你......

創建3個項目:

項目1:你的主要程序(一個與它列表)

項目2:與你的界面項目

public interface IPlugin 
{ 
public void OnKeyPressed(char key); 
} 

項目3:樣本插件

public class PrintPlugin : IPlugin 
{ 
public void OnKeyPressed(char key) 
{ 
    Console.WriteLine(c); 
} 
} 

然後作爲一個參考項目添加2兩項目1和3

這樣你分享兩個主項目和您的任何插件的接口。

我已經在一些項目中使用了它,它對我很好。

2

您也可以查看Managed Extensibility Framework。它爲編寫基於插件的程序提供了一個完整的API,並且如果您打算將插件API提供給第三方,則涵蓋了諸多安全問題。

0

如果您需要加載用戶定義的插件,則應在應用程序啓動(或任何其他操作)時搜索新的DLL。

1)AppDomain.CurrentDomain.GetAssemblies()方法返回加載組件中的在當前的應用程序域

2的列表)搜索一個文件夾中的所有DLL,其中插件應定位,並檢查是否有一定組件處於:這可以通過使用來完成列表。如果沒有,請使用Assembly.Load方法加載此程序集,在其中找到IPlugin類並最終將其添加到List對象。