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

  • 相关阅读:
    sql server版本、组件和管理工具
    asp.net WebService如何去掉asmx后缀
    通过C#发送自定义的html格式邮件
    asp.net上传图片到服务器
    分享一个C#自定义事件的实际应用
    推荐一个ASP.NET网站内容管理系统源码
    asp.net读取模版并写入文本文件
    Win10命令提示符(cmd)怎么复制粘贴
    配置IIS的通配符应用程序映射
    用c-free 5写一个入门的程序
  • 原文地址:https://www.cnblogs.com/lenmom/p/3598849.html
Copyright © 2011-2022 走看看