技术开发 频道

在MVC模式下的UI AOP用例


宿主构件


   首先,让我们看一下DesignerHost类型,有时需要一个工具,此工具使用反射,而且此工具能显示一个程序集的非公共成员。其中一个这样的工具就是反射器,如果还没有使用它,强烈推荐使用,至少应该开始熟悉它。它是学习任何.NET程序集的内部结构最有价值(而且是免费)的工具。我们感兴趣的类型位于VS.NET安装(默认C:\Program Files\Microsoft Visual Studio .NET\Common7\集成开发环境)的Common7\集成开发环境子文件夹中的Microsoft.VisualStudio.dll程序集中。通过它的视窗-定制菜单,你要使反射器显示非公共成员。

    这个类型执行(在许多其它接口中)我们先前所谈到的IContainer接口,而且要求IContainer接口能包含构件,以及通过实现派生的Microsoft.VisualStudio.Designer.集成开发环境signerDocument接口,间接包含System.ComponentModel.Design.IDesignerHost接口。这个接口提供高级别层服务,例如创建构件以及破坏构件,访问与构件相联系的设计器等等。一个位于对象内部执行此System.ComponentModel.Design.IDesignerHost的构件被命名为寄宿构件,这意味着它可以利用被它自己提供的服务。现在只有DesignerHost执行此寄宿构件,但是其它集成开发环境s也会选择执行此寄宿构件。

   这个宿主包含能在组建中利用的大部分服务,通过构件Site属性,可以访问这些服务。当前这个宿主包含下列服务:IDesignerHost、 IComponentChangeService、 IExtenderProviderService、 IContainer、ITypeDescriptorFilterService、IMenuEditorService、 ISelectionService、 IMenuCommandService、IOleCommandTarget、 IHelpService、 IReferenceService、 IPropertyValueUIService and ManagedPropertiesService。可以看到构件可以利用大量的服务,在这篇文章中,我们将展示这些服务的使用方法。

   这些服务的接入点是IServiceProvider接口。DesignSite 和DesignerHost类型都间接地执行这个接口:




    这个接口仅仅包含一个方法GetService,此方法GetService接受一个Type,而此Type暗示重新找到的服务。例如:

IComponentChangeService ccs = (IComponentChangeService) 
host.GetService(typeof(IComponentChangeService));
    现在,DesignSite(通过构件Site属性可以访问此DesignSite)它自己提供两个服务:IDictionaryService 和IextenderListService。对其它服务的要求被传递到了宿主。

   不仅仅通过构件Site属性能直接访问到由VS.NET宿主提供的这些服务,而且从与它相连接的类型(通过属性连接这些类型)可以直接访问到由VS.NET宿主提供的这些服务。通过属性连接的这些类型为构件提供设计时期优越性能。其它类型完成程序结构。
0
相关文章