Visual Studio 2008可扩展性开发(四):添加新的命令2011-04-05 博客园 Anders Cui前言在之前的两篇随笔中,我介绍了Add-In的运行机制,这样对Add-In的事件、生命周期 、与VS如何交互可以有个基本的了解了。现在是时候看看如何在VS中完成一些操作,这才 是Add-In开发的目的所在。一般的,Add-In应当提供一些界面元素,这样用户可以进行某些操作,比如在主菜单 内添加一个菜单项,或者在编辑器的上下文菜单内添加一个菜单项,在本文中就来看看如 何实现这些。关于命令(Command)考虑一个极为常见的场景:在编写代码的过程中,选中一段文本,点击Edit->Copy (或工具栏按钮)或者按下Ctrl+C,我们可以把选中文本拷贝到剪贴板,这个过程的背后 发生了什么?是什么完成的拷贝操作呢?答案是命令。可以认为命令就是某个特定的功能,如Copy 、Paste、Cut等等。VS本身就内置大量的命令(有数千个之多),而上面说到的菜单项、 工具栏或快捷键则执行了这些命令。通过Tools->Options菜单可以查看命令列表:

图1:VS的命令列表值得注意的是,执行命令并非必须通过界面元素,比如在命令窗口中:

图2:在命令窗口执行命令这样也可以执行同样的命令。现在我们知道存在多种方式来执行命令,即菜单、工具 栏、快捷键或命令窗口,这里统称为触发者。在VS中,触发者与命令是分离开来的:用户 通过触发者来执行命令,而命令负责检查自身的状态(名称、是否可见、是否可用等等) 并执行。这意味着,命令可以对应一个或多个菜单项,也可以不对应任何菜单项。另一方面,对于同一个命令,比如Edit.Copy,仍然可能有不同的情况。在文本编辑器 内和在解决方案管理器内的Edit.Copy命令执行内容并不相同。这里有一个命令目标 (Command Target)的概念,VS将命令转向给了命令目标,而命令目标按自己的实现来执 行该命令。总结下来就是:
对象 | 职责 |
触发者 | 提供一种方式供用户使用 |
命令 | 一个逻辑实体,检查自身的状态,可以执行命令,也可以转向一个 命令目标 |
命令目标 | 根据传递过来的命令,按自己的实现来执行它 |