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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Bundle xmlns="urn:uiosp-bundle-manifest-2.0" Name="Wisdo.HomePlugin" SymbolicName="Wisdo.HomePlugin" Version="1.0.0.0" InitializedState="Active" StartLevel="3">
  3. <Activator Type="Wisdo.HomePlugin.BundleActivator" Policy="Immediate" />
  4. <Runtime>
  5. <Assembly Path="bin/Wisdo.HomePlugin.dll" Share="false" />
  6. <Assembly Path="bin\Wisdo.EFDataModels.dll" Share="false" />
  7. <Assembly Path="bin\Wisdo.Commons.dll" Share="false" />
  8. <Assembly Path="bin\EntityFramework.dll" Share="false" />
  9. <Dependency BundleSymbolicName="UIShell.NavigationService" Resolution="Mandatory" />
  10. <Dependency BundleSymbolicName="UIShell.PermissionService" Resolution="Mandatory" />
  11. <Dependency BundleSymbolicName="UIShell.PageFlowService" Resolution="Mandatory" />
  12. </Runtime>
  13. <Extension Point="PageFlowService.PageNode">
  14. <PageNode Name="LoginPage" Priority="30" Value="~/Wisdo.HomePlugin/Hello/Index" />
  15. </Extension>
  16. </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 激活器的定义

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UIShell.OSGi;
  5. using UIShell.PageFlowService;
  6. using UIShell.PermissionService;
  7.  
  8. namespace Wisdo.HomePlugin
  9. {
  10. public class BundleActivator : IBundleActivator
  11. {
  12. public static AppNavigationModel NavigationModel { get; private set; }
  13. public static IBundle Bundle { get; private set; }
  14. public static ServiceTracker<IPermissionService> PermissionServiceTracker { get; private set; }
  15. public static ServiceTracker<IPageFlowService> PageFlowServiceTracker { get; private set; }
  16.  
  17. public static PageNode LayoutPageNode
  18. {
  19. get
  20. {
  21. return PageFlowServiceTracker.DefaultOrFirstService.GetPageNode("LayoutPage");
  22. }
  23. }
  24.  
  25. public void Start(IBundleContext context)
  26. {
  27. // 插件启动的相关内容 比如 打开数据库连接
  28. Bundle = context.Bundle;
  29. NavigationModel = new AppNavigationModel(context.Bundle);
  30. PermissionServiceTracker = new ServiceTracker<IPermissionService>(context);
  31. PageFlowServiceTracker = new ServiceTracker<IPageFlowService>(context);
  32. }
  33.  
  34. public void Stop(IBundleContext context)
  35. {
  36. // 插件停止的相关内容 比如 翻译数据库连接
  37. }
  38. }
  39. }

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. Excel定位对象(按钮等)

    手头只有2003,2007应该类似首先显示控件工具箱,进入设计模式.然后按Ctrl+G,在定位条件里选对象,确定.此时所有空间即被选中,按del可删除之.

  2. 解决RPM包相互依赖的有效方法

    出自:http://blog.csdn.net/kai27ks/article/details/7473683 前言:常用RPM的朋友们都知道,RPM简单易用,但是它的依赖关系是最头疼的!有时候比方说 ...

  3. JavaScript 设置、读取Cookie

    1.设置Cookie //设置cookie function setCookie(cookieName, cookieValue, cookieExpires, cookiePath) { cooki ...

  4. java 对象传递 是 值传递 还是 引用传递?

    这个问题说实话我感觉没有太大的意义. 按第一印象和c++的一些思想去理解的话对象传递是引用传递,因为传递过去的对象的值能被改变. 但是又有很多人,不知道从哪里扣出来一句,java中只有值传递,没有引用 ...

  5. OC错误

  6. mac下使用github

    提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...

  7. HttpClient和WebService的区别和介绍

    1. HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.  HttpClient用来调用服务,它是模拟 ...

  8. C++学习13 类class和结构体struct的区别

    C++保留了C语言的 struct,并且加以扩充.在C语言中,struct 只能包含数据成员,不能包含成员函数.而在C++中,struct 类似于 class,既可以包含数据成员,又可以包含成员函数. ...

  9. struts2 使用注解方式配置

    1.导入convention 包 2.java: package com.struts.base.hello; import java.io.IOException; import java.io.P ...

  10. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...