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方式来进行定义,部署方式很灵活。
Mono addin 学习笔记 4 再论数据扩展点(Data only extension point)的更多相关文章
- Mono addin 学习笔记 3
典型的基于Mono addin插件框架的应用程序有以下一个部分组成: 1. 主应用程序:提供了一系列的扩展点(Extension Point)供其他应用进行扩展: 2. 扩展插件: 其部署结构图如下为 ...
- Mono addin 学习笔记 1
Mono Addin是一个开源的插件框架,其主要支持的特性如下: The main features of Mono.Addins are: Supports descriptions of add- ...
- Mono addin 学习笔记 2
下面分析用xml描述文件的方式来进行插件定义 定义扩展点如下: public interface ISnippetProvider { string GetText (string shortcut) ...
- Mono addin 学习笔记 5 TypeExtensionPoint
1. Attribute声明方式 定义扩展点: [TypeExtensionPoint]public interface ICommand{ void Run();} 定义扩展: [Ex ...
- R学习笔记(4): 使用外部数据
来源于:R学习笔记(4): 使用外部数据 博客:心内求法 鉴于内存的非持久性和容量限制,一个有效的数据处理工具必须能够使用外部数据:能够从外部获取大量的数据,也能够将处理结果保存.R中提供了一系列的函 ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- .NET MVC 学习笔记(六)— 数据导入
.NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...
- python3.4学习笔记(三) idle 清屏扩展插件
python3.4学习笔记(三) idle 清屏扩展插件python idle 清屏问题的解决,使用python idle都会遇到一个常见而又懊恼的问题——要怎么清屏?在stackoverflow看到 ...
随机推荐
- 转发自AstralWind的博客(python正则表达式)
原文地址:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python ...
- Apache+Tomcat构建Tomcat负载均衡集群
一.环境介绍 二.安装后端服务器 三.安装前端Apache服务 四.配置Apache使用mod_jk模块实现代理及负载均衡 五.配置Apache基于mod_proxy模块实现代理及负载均衡 六.论坛安 ...
- Ubuntu user switch
To list all users you can use: cut -d: -f1 /etc/passwd To add a new user you can use: sudo adduser n ...
- The 10 best sweet treats in Singapore
Every time I walk out of Changi airport's air-conditioning into the humid outdoors, there's a sweet ...
- 字符串中带有emoji表情处理
1:先删除字符然后解析当前字符再显示 edit.addTextChangedListener(new TextWatcher() { @Override public void beforeTextC ...
- C语言程序设计第一次作业
同学们,我们已经留了两次实验了,请大家将这两次的实验课内容写成实验报告在截止日期前进行提交. 截止日期:2016-10-7 23:00 实验一: 编程打印5行的倒三角形,第一行打印9个*,第二行7个* ...
- 315Mhz、433Mhz无线遥控信号的解码分析和模拟
摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择.于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等, ...
- 【转】精心推荐几款超实用的 CSS 开发工具
原文转自:http://www.html5cn.org/article-5741-1.html 摘要: 当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- HDU 2717 Catch That Cow (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 Catch That Cow Time Limit: 5000/2000 MS (Java/Ot ...