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方式来进行定义,部署方式很灵活。

  • 相关阅读:
    微信定制开发怎么做?
    bzoj4069【APIO2015】巴厘岛的雕塑
    bzoj3174【TJOI2013】解救小矮人
    bzoj3531【SDOI2014】旅行
    单例模式
    JDK自带的定时任务
    centos6下手工编译vitess
    Rocchio算法
    Excel如何查找名字重复的数据
    MyEclipse8.5快速搭建SSH框架
  • 原文地址:https://www.cnblogs.com/lenmom/p/3598849.html
Copyright © 2011-2022 走看看