プラグインの開発入門について.

3317 ワード

今では多くのソフトウェアがプラグインをサポートしているので、自分も小さなプラグインプログラムを作っています.
プラグインの開発に関する知識点は次のとおりです.
  • メタデータ.C#中はTypeクラス
  • eg:ChineseクラスのTypeを手に入れたい場合は、Chinese c(Chineseのオブジェクト)——』c.GetType();
    2つ目はChineseクラスで入手可能---typeOf(Chinese)
  • プラグインの開発を実現するには、まず一定の規範要求を指定しなければならない.インタフェースを指定する必要があります.

  • 次に行う小さな例は、簡易手帳のプラグイン開発です.
    まずインタフェースを定義します.
       public interface IEditor
    
        {
    
            string AddinName//     
    
            {
    
                get;
    
            }
    
    
    
            void Execute(TextBox txtbox);//                 
    
        }
    
    

     
    そして私たちのプラグインの開発を始めます.一般的には、プロジェクトの下にフォルダ名「addin」または「plug-in」を作成します.ここで前者を選択します.
    一般的に、プログラムでクラスライブラリを使用するには、プロジェクトの参照に追加する必要があります.しかし、プラグインは私たちがプロジェクトを開発して「*.dll」を追加し、実行すると新しく追加されたプラグインが見えます.------ここでは反射機構を用いた.
     string addinsPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    
     string filePath = Path.Combine(addinsPath, "Addins");
    
     string[] files = Directory.GetFiles(filePath, "*.dll");
    
    

    以上の意味では、Addinsフォルダを見つけて「dll」という接尾辞のファイルを探します.次に、このフィルタリングされたファイルを巡り、深くフィルタリングします.
     foreach (var item in files)
    
     {
    
                    try
    
                    {
    
                        Assembly asem = Assembly.LoadFile(item);//   dll       
    
                        Type[] typs = asem.GetExportedTypes();//    dll        
    
                        for (int i = 0; i < typs.Length; i++)
    
                        {
    
                            Type typIEditor = typeof(IEditor);
    
                            //       typ[i]     typIEditor  ,  typ[i]                。
    
                            if (typIEditor.IsAssignableFrom(typs[i]) && !typs[i].IsAbstract)
    
                            {
    
                                //     typ[i]      。   new     。
    
                                object obj = Activator.CreateInstance(typs[i]);
    
                                IEditor editor = obj as IEditor;
    
                    //            ,     “  ”      
    
                                ToolStripItem tsmi = tsmiTool.DropDownItems.Add(editor.AddinName);
    
                                tsmi.Click += new EventHandler(tsmi_Click);//              ,                  editor    
    
                                tsmi.Tag = editor;//       editor  
    
                            }
    
                        }
    
                    }
    
                    catch (BadImageFormatException)
    
                    {
    
                        continue;
    
                    }
     void tsmi_Click(object sender, EventArgs e)
    
     {
    
                ToolStripItem tsmi = sender as ToolStripItem;
    
                if (tsmi != null)
    
                {
    
                    IEditor editor = tsmi.Tag as IEditor;
    
                    editor.Execute(this.textBox1);
    
                }
    
     }
    
    

     
    次に、カスタムプラグインを開発できます.自分でClassLibraryプロジェクトを作成します.
    次にクラス(eg:class 1.cs)を作成し、最初に約束したルール(IEditor)を実現させます.
     public class Class1 : IEditor
    
        {
    
    
    
            public string AddinName
    
            {
    
                get
    
                {
    
                    return "    ";//     ”  “      
    
                }
    
            }
    
         //        
    
            public void Execute(System.Windows.Forms.TextBox txtbox)
    
            {
    
                txtbox.Text = txtbox.Text.ToUpper();
    
            }
    
        }
    
    

    最後にコンパイルしてコンパイルしたdllファイルをAddinsフォルダの下に置きます.そしてカスタムプラグイン機能が見えてきますね...