2011-07-18 10 views
3

私は簡単なプラグインベースのプログラムを書いています。私はいくつかの方法と機能を持っているIPluginというインターフェースと私のメインプログラムのList<Plugin>を持っています。簡略化のために、言うことができますそのように定義:C#DLLを作成インターフェイスを実装するプラグイン

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

毎回キーを押すと、Iプラグインのリストをループし、それらのそれぞれのOnKeyPressed(c)を呼び出します。

私はそうのようなクラスを作成し、リストに追加することができます...

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

そして、あなたがキーを押したときに、その後、そのプリントアウト

。しかし、私はDLLファイルからプラグインをロードできるようにしたい。 This linkは役に立ちましたが、DLLのクラスに私の IPluginインターフェイスを実装する方法を説明していません...どうすればいいですか?

プロジェクト:私が正しくあなたを理解していた場合、私は本当に

3つのプロジェクトを作成します...

+0

あなたのライブラリへの参照を追加することができます。それ以降は、プラグインインタフェースを使用することができます。 – VMAtm

+0

私は実行時にそれらをロードして、ユーザーが独自のプラグインを作成できるようにしたいと考えています。 – Entity

+0

次に、リスト 'のようなプロパティを作成して、ユーザーがリストにプラグインを追加できるようにする必要があります。 – VMAtm

答えて

5

... IPlugin.csファイルに私はプラグインを作りたいたびにコピーする必要がありますする必要はありません1:あなたのメインプログラム

プロジェクト2(その中にリストを持つ1):あなたのインターフェイスを持つプロジェクト

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

プロジェクト3:サンプルプラグイン

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

次にプロジェクト1と3

の両方を参照すると、あなたのメインプロジェクトとあなたのプラグインのいずれかの両方でインターフェースを共有するこの方法は、プロジェクト2を追加します。

私はこれをいくつかのプロジェクトで使用しています。

2

Managed Extensibility Frameworkもご覧ください。これは、プラグインベースのプログラムを書くための完全なAPIを提供し、プラグインAPIを第三者に利用可能にする予定がある場合、セキュリティなどの多くの懸念をカバーします。

0

ユーザー定義のプラグインを読み込む必要がある場合は、アプリケーションの起動時に新しいDLLを検索する必要があります。プラグインが配置されるべきであるフォルダ内のすべてのDLLを検索し、特定のアセンブリがであるかどうかを確認)AppDomain.CurrentDomain.GetAssemblies()方法は、現在のアプリケーションドメイン

2に装填されたアセンブリのリストを返す)

1:これは、使用して行うことができますリスト。そうでない場合はAssembly.Loadメソッドを使用してこのアセンブリを読み込み、IPluginクラスを見つけて最後にListオブジェクトに追加します。

関連する問題