在使用 OSGI.NET进行插件式的开发时,需要对 Mainfest.xml 进行配置, Mainfest 文件是插件的重要配置文件,其中暴露了插件启动方式以及插件启动时所依赖的程序集或其它资源的信息.一个完整的Mainfest 文件的信息如下

<?xml version="1.0" encoding="utf-8"?>
<Bundle xmlns="urn:uiosp-bundle-manifest-2.0" Name="Wisdo.HomePlugin" SymbolicName="Wisdo.HomePlugin" Version="1.0.0.0" InitializedState="Active" StartLevel="3">
<Activator Type="Wisdo.HomePlugin.BundleActivator" Policy="Immediate" />
<Runtime>
<Assembly Path="bin/Wisdo.HomePlugin.dll" Share="false" />
<Assembly Path="bin\Wisdo.EFDataModels.dll" Share="false" />
<Assembly Path="bin\Wisdo.Commons.dll" Share="false" />
<Assembly Path="bin\EntityFramework.dll" Share="false" />
<Dependency BundleSymbolicName="UIShell.NavigationService" Resolution="Mandatory" />
<Dependency BundleSymbolicName="UIShell.PermissionService" Resolution="Mandatory" />
<Dependency BundleSymbolicName="UIShell.PageFlowService" Resolution="Mandatory" />
</Runtime>
<Extension Point="PageFlowService.PageNode">
<PageNode Name="LoginPage" Priority="30" Value="~/Wisdo.HomePlugin/Hello/Index" />
</Extension>
</Bundle>

节点 Bundle 描述插件名称[Name] xml 文件架构[xmlns] 对应的命名空间名字[SymbolicName] 版本号[]Version  以及激活状态[InitializedState]

节点 Activator 描述插件启动时所要调用的激活器[Type], 以及启动的方式[Policy] 另外还有个属性 Level 表示启动的顺序,默认是2,最大是50,数字越小,启动的越早

Runtime 节点定义了插件启动时所需要的资源:

[Assembly] 表示所依赖的本地的程序集,一般指向插件的bin 目录,

[Dependency] 表示依赖的其它的插件,类型是 xml 文件,也是就其它插件的 Mainfest .xml 文件

Extension 是扩展,表示对插件进行扩展 ,其中的属性 Point 是定义的扩展点

[PageNode] 表示在插件页面上的一些导航节点,即一个超连接,可以连接到另外一个页面上

 

接下来看看 Activator 激活器的定义

using System;
using System.Collections.Generic;
using System.Text;
using UIShell.OSGi;
using UIShell.PageFlowService;
using UIShell.PermissionService; namespace Wisdo.HomePlugin
{
public class BundleActivator : IBundleActivator
{
public static AppNavigationModel NavigationModel { get; private set; }
public static IBundle Bundle { get; private set; }
public static ServiceTracker<IPermissionService> PermissionServiceTracker { get; private set; }
public static ServiceTracker<IPageFlowService> PageFlowServiceTracker { get; private set; } public static PageNode LayoutPageNode
{
get
{
return PageFlowServiceTracker.DefaultOrFirstService.GetPageNode("LayoutPage");
}
} public void Start(IBundleContext context)
{
// 插件启动的相关内容 比如 打开数据库连接
Bundle = context.Bundle;
NavigationModel = new AppNavigationModel(context.Bundle);
PermissionServiceTracker = new ServiceTracker<IPermissionService>(context);
PageFlowServiceTracker = new ServiceTracker<IPageFlowService>(context);
} public void Stop(IBundleContext context)
{
// 插件停止的相关内容 比如 翻译数据库连接
}
}
}

OSGI.NET mainfest.xml 配置的更多相关文章

  1. 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构

    Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...

  2. Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):4、Maven项目转换与pom.xml配置

    文章目录: Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1.JIRA账号注册 Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2.PGP ...

  3. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  4. SpringMvc的xml配置与annotation配置的例子的区别

    1.导入jar包时,要在xml配置基础上加 spring-aop-4.2.2.RELEASE.jar (注解的时候需要) 2.编写controller的时候要annotation需要做相关配置即红色部 ...

  5. Hibernate实现有两种配置,xml配置与注释配置

    hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...

  6. java web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  7. 关于xml配置实现AOP的小知识

    除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们.在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2. ...

  8. Ninject之旅之五:Ninject XML配置

    摘要 使用XML配置,需要添加Ninject XML扩展的引用.下一步是添加一个或多个包含类型注册的XML文件.记得这些文件应该跟应用程序一起发布.因此不要忘记将XML文件的属性设置成“Copy if ...

  9. hibernate实现有两种配置,xml配置与注释配置。

    (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) <?xml version='1.0' encoding= ...

随机推荐

  1. MySQL运行出错:无法连接驱动、无root访问权限解决办法

    按照疯狂java讲义的13.3的程序,发现程序运行出错. 1.点开runConnMySql.cmd运行文件,出现如下结果: 2.用Editplus进行编译运行,如下结果: 报错定位到程序第18行,而第 ...

  2. 删除SQL server 实例

    在网上找到下面几种方法,本人使用的是第一种,很实用. 1.删除 SQL Server 的特定实例若要删除 SQL Server 的某个特定实例,请按照以下步骤操作: 找到并删除%drive%:\\Pr ...

  3. scala高级内容(二) - Implicit

    一. Implicit关键字 隐士转换 (1)隐士转换函数:用implicit修饰的,只有一个参数的函数.他会被自动执行,来把一个值转换成另一个 class RichFile(val f:File){ ...

  4. Educational Codeforces Round 15 Powers of Two

    Powers of Two 题意: 让求ai+aj=2的x次幂的数有几对,且i < j. 题解: 首先要知道,排完序对答案是没有影响的,比如样例7 1一对,和1 7一对是样的,所以就可以排序之后 ...

  5. php之面向对象

    <?php declare(encoding='UTF-8'); class Site{ /*成员变量*/ var $url; var $title = "gunduzi" ...

  6. cocopods的安装和使用

  7. 为什么引用不了App_Code里的类

    在Web应用程序中不能通过右键项目-〉”添加“-〉”添加ASP.NET文件夹“方式添加 .因为Web应用程序中App_Code就不存在 .不过可以通过手动的方式创建,添加一个文件夹命名为App_Cod ...

  8. Windows 32 程序设计

    C语言版 开发语言:C语言 开发工具:Visual Studio 2015 目      标:使用C语言,直接调用Windows API,创建Windows程序. 参考图书:<Windows程序 ...

  9. Python中在脚本中引用其他文件函数的方法

    在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和 ...

  10. rails4.2.6配置发送邮件

    调试了很久,最后终于可以发送了 1 在config/environments/development.rb文件里配置邮件信息 config.action_mailer.raise_delivery_e ...