Mono addin 学习笔记 5 TypeExtensionPoint

1. Attribute声明方式

定义扩展点:

[TypeExtensionPoint]
public interface ICommand
{
        void Run();
}

定义扩展:

[Extension]    

public class TraceCommand : ICommand    

{       

        public void Run()        

       {            

             Console.WriteLine("Trace output");        

       }

}

使用方式为:

foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes(typeof(ICommand)))
{
        ICommand cmd = node.CreateInstance() as ICommand;
        cmd.Run();
}

2.xml声明方式

定义接口:

public interface ICommand
{
        void Run();
}

实现该接口的类:

public class TraceCommand : ICommand    

{       

        public void Run()        

       {          

              Console.WriteLine("Trace output");   

       }

}

xml声明扩展点

  <!--没有显示实现了扩展节点(ExtensionNode)的配置方法 设置对应节点的objectType属性-->
  <ExtensionPoint path="/DataExtensionPointMenifest/ICommand"  name="ICommand">
       <ExtensionNode name="Command" objectType="ICommand"/>
  </ExtensionPoint>

注:扩展节点也可以定义成这样:

       <ExtensionNode name="Command" />

即不指定objectType。

每个扩展点都必须定义包含扩展节点元素

定义扩展:

  <Extension path = "/DataExtensionPointMenifest/ICommand">
    <Command  type="TraceCommand" />

    <Command  class="DataExtensionAddin.ConsoleCommand" />
  </Extension>

原文地址:https://www.cnblogs.com/lenmom/p/3598943.html