Pluginの実装1

実益と勉強と兼ねながら、趣味のC#プログラミングをしています。
実益というのは自分が使うことを目的としたツールを作ることです。
勉強というのは、フリーソフト等で使われているテクニカルなことをC#で実装して、プログラムの技の数を増やすことです。


Coding4Fun見ていたら、遊びのプログラムをやりたくなったというのがこの話の始まりです。
http://msdn.microsoft.com/coding4fun/
http://www.microsoft.com/japan/msdn/coding4fun/


で、いくつかの小物ツールを作っていたのですが、どうせなら各ツールを統合しようと思いました。
メインとなる常駐ツールから、各機能をPluginとして実行する形態です。
そこでPlugin機構が必要だなと思い、実装をしてみました。
#Plugin機構を作ること自体もお勉強


ちなみに統合されたツールYahoo! Widgetの様なものをイメージして、以下Widgetと呼びます。
Yahoo! WidgetWidget毎に1プロセスですが


PluginといえばまずPlugin用のinterfaceが必要なので、以下の様なものを用意しました。

public interface IWidget
{
    void Run();

    void Exit();

    ToolStripMenuItem GetWidgetMenu();
}

また、IWidget実装クラスのWidget用メタ情報として、次の様なクラスも作成しました。

[AttributeUsage( AttributeTargets.Class )]
public class WidgetInfoAttribute : Attribute
{
    private string name;
    private string version;
    private string description;

    public string Name
    {
        get { return ( this.name ); }
        set { this.name = value; }
    }

    public string Version
    {
        get { return ( this.version ); }
        set { this.version = value; }
    }

    public string Description
    {
        get { return ( this.description ); }
        set { this.description = value; }
    }

    public WidgetInfoAttribute()
    {
    }
}