标签:category median 注册服务 report coding http 实现 eve contact
模块清单文件(Manifest.xml)位于模块标准目录结构的根目录之下,它定义了模块的 基本信息、模块激活信息、模块类加载相关的运行时信息、服务定义信息、模块扩展定义信息 以及模块详细信息。这一小节将详细介绍清单文件的定义。
以下是一个清单文件的示例。这个清单文件的命名空间是“urn:uiosp-bundle-manifest-2.0” ,它定义了一个唯一名称为ShellPlugin,名称也为ShellPlugin的模块。这个模块的版本是 1.0.0.0,当UIOSP框架被启动时,这个模块会被加载并自动激活。此外,这个模块启动级别 为2,即它在级别为1的所有模块后面被启动。
<?xml version="1.0" encoding="utf-8"?>
<Bundle xmlns="urn:uiosp-bundle-manifest-2.0" SymbolicName="ShellPlugin" Version="1.0.0.0" Name="ShellPlugin"
InitializedState="Active" StartLevel="2">
<Activator Type="ShellPlugin.Activator" Policy="Immediate" />
<Runtime>
<Assembly Path="bin\ShellPlugin.dll" Share="false" />
</Runtime>
<ExtensionPoint Point="ShellPlugin.MenuStrip" />
</Bundle>
此外,以上清单文件定义了该模块的一个本地程序集“bin\ShellPlugin.dll”,该 程序集位置相对于模块的根目录,当然,你也可以指定一个绝对目录。模块还定义了一个 激活器和扩展点。关于这些定义,我们在以下将详细介绍。
清单文件是一个标准格式的XML文件,该文件的XML节点和属性命名规则采用C#的Property 方式命名,即每一个单词的头一个字母大写,单词间没有分隔符。
Bundle是整个清单文件的根节点。该节点用于定义模块的特征名称(唯一标识)、 名称、版本号、模块在平台启动后的初始状态、启动级别、宿主模块标识、宿主模块版本 和命名空间属性。模块的特征名称是必须填写的属性,命名空间用于在编写XML文件时获得 智能提示。该节点的结构如图4-3所示。
Bundle节点的属性的详细描述如下:
Bundle节点还包含:至多一个Activator节点、一个Runtime节点、至多一个Services节点 、若干ExtensionPoint节点、若干Extension节点和至多一个BundleInfo节点。
该节点定义一个模块启动和停止的入口。Activator节点的XML结构如图4-4所示。
该节点由Type和Policy属性组成。它们的描述如下:
该节点定义了模块的类型空间。模块类型空间是指模块可访问的类型的集合,它 决定了一个模块向外提供的功能。UIOSP平台中,每一个模块都具有其独立的类型空间和 类加载器,类加载器用于从其类型空间中加载类型。模块类型空间由本地程序集和依赖 的其它模块的程序集构成。Runtime节点的XML结构如图4-5所示。
该节点由Assembly和Dependency节点组成,分别表示模块本地程序集和依赖程序集。 它们的描述如下。
Assembly节点用于定义模块一个本地程序集,本地程序集分为私有程序集和 共享程序集,后者表示该程序集的类型可以被其它模块共享使用。私有程序集的 Share属性为false,相反,共享程序集为true。该节点由Path和Share属性构成, 它们的描述如下:
Dependency节点用于模块一个程序集依赖声明,它表示该插件引用了另一个 插件在Assemly定义的Share为true的程序集。该节点由BundleSymbolicName、BundleVersion、 AssemblyName、AssemblyVersion和Resolution属性组成,其描述如下:
Services节点用于声明一个模块向外暴露的服务,这些服务在模块启动时自动注册到UIOSP 平台,并在模块停止时从平台卸载。模块可以通过两种方式向平台注册服务,一种方法是通过激活器 的Start方法中的IBundleContent类型参数的AddService来注册,另一种方法是通过Manifest.xml 的文件Services节点来注册服务。Services节点的结构如图4-6所示。
Services节点由若干个Service节点组成,Service节点用于表示一个具体的服务, 该节点由Interface和Type属性组成,它们的描述如下:
该节点用于定义一个模块向其它模块暴露的扩展功能,这样其它模块可以通过定义 Extension节点来注入相应的扩展功能实现。UIOSP通过ExtensionPoint和Extension这一对 XML配置节点来实现模块的扩展。一般而言,插件扩展需要通过2个步骤实现:(1)在 Manifest.xml定义一个扩展点;(2)在插件通过IBundleContext.ExtensionChanged 事件和IBundleContext.GetExtensions获取其它插件对其扩展并进行处理。该平台 所有的扩展信息都具备动态性,即当模块被启动时扩展点和扩展会注册到平台,相反,当 模块被卸载时,它们会被卸载掉。该节点的结构如图4-7所示。
该节点由Point和Schema属性组成,它们的描述如下:
该节点用于定义一个模块对另一个模块的扩展。其结构如图4-8所示
该通过Point属性指定其对应的扩展点的名称,它包含的所有子节点就是注册到 扩展点的内容的信息,子节点必须通过扩展点定义的Schema的验证。以下是Extension 定义的示例。该示例定义的扩展其对应的扩展点是UIShell.SiteMap。当该模块启动时, 它会把Extension包含的信息注册到平台,暴露出UIShell.SiteMap扩展点的模块可以 通过模块上下文获取这个定义,然后在导航栏上创建相应的节点。
<Extension Point="UIShell.SiteMap">
<siteMapNode path="/" title="Home" description="Home">
<siteMapNode title="Home" description="Home" url="~/default.aspx"/>
<siteMapNode title="Introduction" url="~/Plugins/ReportPlugin/default.aspx"/>
<siteMapNode title="Report Demo" url="~/Plugins/ReportPlugin/test.aspx"/>
</siteMapNode>
<siteMapNode path="/Products" title="Products" description="Our products"
url="~/Products.aspx">
<siteMapNode title="Hardware" description="Hardware choices"
url="~/Hardware.aspx" />
<siteMapNode title="Software" description="Software choices"
url="~/Software.aspx" />
</siteMapNode>
</Extension>
该节点用于定义模块的详细信息,为可选节点,其结构如图4-9所示。
该节点包含的属性的详细描述如下:
清单文件的XML完整架构如图4-10所示。
标签:category median 注册服务 report coding http 实现 eve contact
原文地址:https://www.cnblogs.com/iwanwu/p/9926166.html