zoukankan      html  css  js  c++  java
  • Mono addin 学习笔记 4 再论数据扩展点(Data only extension point)

    1. Attribute声明方式

    定义扩展属性

    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple= true)]    

    public class WelcomeMessagesAttribute : CustomExtensionAttribute    

    {        

             [NodeAttribute]        

             public string Message  { get;set;}

            /// <summary>        

            /// The default constructor is must for the arrtibute.        

            /// </summary>        

            public WelcomeMessagesAttribute()        

           {                 

            }

            public WelcomeMessagesAttribute([NodeAttribute("Message")] string message)        

           {            

                   this.Message = message;   

           }  

     }

    定义扩展点,

    [assembly: ExtensionPoint("/DataExtensionPointMenifest/WelcomeMessages",   ExtensionAttributeType = typeof(WelcomeMessagesAttribute))]

    定义数据扩展

    [assembly: WelcomeMessagesAttribute("One message")]

    [assembly: WelcomeMessagesAttribute("Another message")]

    调用方式:

                foreach (ExtensionNode<WelcomeMessagesAttribute> node in AddinManager.GetExtensionNodes("/DataExtensionPointMenifest/WelcomeMessages"))
                {
                    Console.WriteLine(node.Data.Message);
                }

    输出为:

    One message

    Another message

    2. xml配置方式

    定义扩展节点

    public class MessageExtensionNode : ExtensionNode    

    {        

              [NodeAttribute]        

              public string Message { get; set; }

              public MessageExtensionNode()        

              {           

                     // Nothing to do.       

               }

              public MessageExtensionNode([NodeAttribute("Message")] string message)       

              {          

                      this.Message = message;  

              }   

    }

    扩展点声明xml配置方法为:

      <!--显示实现了扩展节点(ExtensionNode)的配置方法 设置对应节点的type属性-->
      <ExtensionPoint path="/menifestMessage"  name="WelcomeMessages" >
               <ExtensionNode name="MessageNode"
                       type="MessageExtensionNode"><!--定义扩展点类型,和具体的CLR类名相同-->
              </ExtensionNode>
      </ExtensionPoint>

    实现上述扩展点的xml配置为:

      <Extension path = "/menifestMessage">
        <MessageNode   Message="MessageExtensionNode: One message"  />
        <MessageNode   Message="MessageExtensionNode: Two message"  />
      </Extension>

    使用方法:

    foreach (MessageExtensionNode node in AddinManager.GetExtensionNodes("/menifestMessage"))
    {
          Console.WriteLine(node.Message);
    }

    输出为:

    MessageExtensionNode: One message

    MessageExtensionNode: Two message

     基于数据的扩展点,能够实现的功能包括:

    1.  懒加载,Mono addin通过扫描扩展点数据,只在需要使用到具体的插件的时候才会去加载插件,可以动态创建具体的类型,在具体执行时才创建具体的类型;

    2.  和App.config文件相比,数据扩展点可以将配置分布在不同的插件工程配置中,而不需要集中在主程序的config文件中。

    3.  部署时可以通过单独的文件进行部署,也可以作为嵌入式资源文件保存到dll文件中。还可以通过代码Attribute方式来进行定义,部署方式很灵活。

  • 相关阅读:
    POJ 3695 Rectangles
    POJ 2002 Squares
    linux 查看磁盘空间大小
    keymaster 快捷键管理器
    Pxloader
    as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
    javascript的dom选择器
    javascript音频管理方案:SoundManager2
    Morris.js – 画折线图、面积图和环状图的统计图表库
    jsuri 让你方便的处理url
  • 原文地址:https://www.cnblogs.com/lenmom/p/3598849.html
Copyright © 2011-2022 走看看