下面分析用xml描述文件的方式来进行插件定义

定义扩展点如下:

public interface ISnippetProvider

{

string GetText (string shortcut);

}

下面定义基于该扩展点的扩展如下:

class StockSnippetProvider: ISnippetProvider

{

public string GetText (string shortcut)

{

foreach (ExtensionNode<SnippetAttribute> node in AddinManager.GetExtensionNodes("/SnippetsAddinNode/StockSnippets"))

{

if (node.Data.Shortcut == shortcut)

return node.Data.Text;

}            return null;

}

}

//定义扩展属性如下:

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

public class SnippetAttribute : CustomExtensionAttribute  

{

public SnippetAttribute ()

{   }

public SnippetAttribute ([NodeAttribute ("Shortcut")] string shortcut, [NodeAttribute ("Text")] string text)

{

Shortcut = shortcut;

Text = text;

}

[NodeAttribute]

public string Shortcut { get; set; }

[NodeAttribute]

public string Text { get; set; }

}

到目前位置,扩展点和扩展都已经定义好了,现在使用xml文件来将进行插件的定义,具体如下:

<addin id="SnippetsAddinNode" version="1.0" >

<Dependencies>

<Addin id="TextEditorExtensionNode.Core" version="1.0"/>

</Dependencies>

<ExtensionPoint path="/SnippetsAddinNode/StockSnippets"  name="StockSnippets">

<ExtensionNode name="Command"/>

</ExtensionPoint>

<Extension path = "/SnippetsAddinNode/StockSnippets">

<Command  type="SnippetAttribute"  Shortcut="c"  Text="Hello"/>

<Command  type="SnippetAttribute"  Shortcut="for"  Text="for (int n=0; n &lt len; n++)\n{\n\t=&lt|&gt\n}"/>

<Command  type="SnippetAttribute"  Shortcut="foreach"  Text="foreach (var item in col)\n{\n\t&lt|&gt\n}"/>

</Extension>

</addin>

使用扩展点的代码如下:

foreach (ISnippetProvider provider in AddinManager.GetExtensionObjects <ISnippetProvider>())

{

string fullText = provider.GetText (word);

}

注意: xml配置方式定义的扩展点,支持以嵌入式资源方式和程序集一起发布,也支持配置文件以单独的文件的方式来部署

下一篇将详细参数扩展点的几种方式

Mono addin 学习笔记 2的更多相关文章

  1. Mono addin 学习笔记 4 再论数据扩展点(Data only extension point)

    1. Attribute声明方式 定义扩展属性 [AttributeUsage(AttributeTargets.Assembly, AllowMultiple= true)] public clas ...

  2. Mono addin 学习笔记 3

    典型的基于Mono addin插件框架的应用程序有以下一个部分组成: 1. 主应用程序:提供了一系列的扩展点(Extension Point)供其他应用进行扩展: 2. 扩展插件: 其部署结构图如下为 ...

  3. Mono addin 学习笔记 1

    Mono Addin是一个开源的插件框架,其主要支持的特性如下: The main features of Mono.Addins are: Supports descriptions of add- ...

  4. Mono addin 学习笔记 5 TypeExtensionPoint

    1. Attribute声明方式 定义扩展点: [TypeExtensionPoint]public interface ICommand{        void Run();} 定义扩展: [Ex ...

  5. NGUI 学习笔记实战之二——商城数据绑定(Ndata)

    上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客   NGUI 学习笔记实战——制作商城UI界面  ht ...

  6. MVC_学习笔记_2_Authorize

    MVC5_学习笔记_2_Authorize/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nico ...

  7. C#.NET学习笔记1---C#.NET简介

    C#.NET学习笔记1---C#.NET简介 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com -------------- ...

  8. VSTO学习笔记(十四)Excel数据透视表与PowerPivot

    原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...

  9. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

随机推荐

  1. redhat6.4安装storm集群-4节点

    0.搭建ftp服务器并建立yum源 1.在每个节点上安装java并设置环境变量 2.在三个节点上安装zookeeper 3.安装zeromq 过程中发现运行./configure时出现问题: conf ...

  2. plist文件Boolean类型读写方法

    http://blog.csdn.net/a6472953/article/details/7659505   转 1.读取plist文件中的Boolean类型的字段值时,要先把它转为NSNumber ...

  3. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...

  4. angularjs中展示富文本编辑器文本,向DOM中插入元素

    前几天在用textangular富文本编辑器插件时,将存储的文本及格式存储到数据库中,但是从后台接口中再向angular页面插入时却不能执行,即在Angular中操作DOM没有实现,后来查看了一下,操 ...

  5. H5实现俄罗斯方块(四)

    图片加载的js: (function (window) { 'use strict'; //定义缓存的Map对象 var cacheMap = new Map(); //资源的总数量 var reso ...

  6. 1、c#对XML文件的解析

    1.XML文件 <?xml version="1.0" encoding="utf-8"?> <PersonF xmlns="&qu ...

  7. Linux多人群聊系统(简单多线程服务器)

    一:要求 1.通过一个服务器实现最多5个客户之间的信息群发. 2.服务器显示客户的登录与退出: 3.客户连接后首先发送客户名称,之后发送群聊信息: 4.客户输入bye代表退出,在线客户能显示其他客户的 ...

  8. day14_API第四天

    1.正则(了解) 1.基本的正则表达式(看懂即可) 字符类[abc] a.b 或 c(简单类)[^abc] 任何字符,除了 a.b 或 c(否定)[a-zA-Z] a 到 z 或 A 到 Z,两头的字 ...

  9. 快速判断ie10及以上版本浏览器

    if (!(/msie [6|7|8|9]/i.test(navigator.userAgent))){ //ie10以上 }; 快速判断ie10及以上版本浏览器

  10. “__doPostBack”未定义

    项目中发现IE10等高级浏览器报错 ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误 为此微软工程师解释如果发布asp2.0 asp4.0发布时,这些浏览器还未 ...