OSGi规范的C#实现开源
这是大约在3-4年前完成的一个C#实现的OSGi框架,实现的过程参照了OSGi规范与与一些实现思路(感谢当时的那些资料与项目),此框架虽然仅在几个小型项目有过实际的应用,但OSGi的规范实现还是相对比较完整的,包涵了一些基本的要素,由于个人的项目重心已经转移,现在打算把它公开出来,供大家参考:
OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序扩展(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次:
- 1.运行环境
- 2.模块(Bundle)
- 3.生命周期管理
- 4.服务注册
- 5.扩展点支持
目前OSGi.NET具有如下特色:
- 1.组件的可插拔性:组件可根据业务需要在运行时进行装载、卸载操作
- 2.组件的动态更新:组件在运行时可更新替换当前版本
- 3.组件的版本隔离:不同组件引用相同产品的不同版本程序集可以版本隔离
- 4.组件完整的生命周期:包括已安装、已装载、已激活、启动中、停止中、已卸载
- 5.组件的加载顺序:组件加载根据业务要求可设置加载级别来控制加载次序
- 6.组件的通信支持:组件间通过面向服务的编程模型来达到组件间通信、调用的目的
- 7.组件的扩展支持:组件提供了扩展点及其扩展来满足某个组件的扩展性支持
启动一个OSGi.NET应用程序仅需要如下代码
using System; using OSGi.NET.Core.Root; namespace ConsoleDemo
{
class Program
{
static void Main(string[] args)
{
//创建框架工厂
var frameworkFactory = new FrameworkFactory();
//创建框架内核
var framework = frameworkFactory.CreateFramework();
//初始化框架
framework.Init();
//启动框架
framework.Start(); Console.ReadLine();
}
}
}
创建一个OSGi.NET项目需要:
1.引用框架内核程序集OSGi.NET.dll
2.添加框架内核配置文件OSGi.NET.properties
3.如需要日志支持,添加log4net.config文件及log4net.dll程序集引用
OSGi.NET项目的默认文件目录结构如下
/程序目录
/程序目录/Bundles/
/程序目录/Bundles/模块A/
/程序目录/Bundles/模块A/Manifest.xml
/程序目录/Bundles/模块A/模块A.dll
/程序目录/Bundles/模块A/Libs/
/程序目录/Bundles/模块A/Libs/* .dll
/程序目录/Bundles/模块B/
/程序目录/Bundles/模块C/
/程序目录/Libs/(可选)
/程序目录/OSGi.NET.properties
注:
程序目录中的Libs文件夹存放个Bundles的共享程序集(也可通过在配置文件中配置共享清单),如接口契约、公共第三方类库等。
模块A中的Libs文件夹存放其私有程序集。
Manifest.xml作为程序清单文件对模块进行自描述。
OSGi.NET.properties为框架内核配置文件
关于加载次序:
由于业务需求,各模块存在依赖关系的可能,所以模块加载也会有加载顺序的要求,此时可以通过清单文件中Manifest.xml,Bundle节点的StartLevel属性对其加载次序进行设置。数值越小,加载越前。
关于Bundle引用程序集搜索原则:
1.根据加载的Bundle引用程序集,依据程序集名称+版本号匹配原则,优先从[/程序目录/Libs/]目录或共享清单中搜索。
2.如第一步无匹配,则根据程序集名称从[/程序目录/Bundles/模块A/Libs/*.dll]目录搜索,并将搜索到的程序集对应版本关联Bundle。
3.各Bundle下Libs目录程序集在加载中做了Bundle间的隔离,确保不同的Bundle引用的程序集间不会造成影响。即:如存在共享程序集请放置[/程序目录/Libs/]目录或在共享清单配置。
Intro: http://www.diginfo.me/osgi-net-implement
源代码 https://github.com/FreezeSoul/OSGi.NET
OSGi规范的C#实现开源的更多相关文章
- 重新诠释的OSGi规范
上周五部门开会讨论新一代产品(基于.net Winform)的设计规范,从设计规范慢慢讨论到体系结构等架构存在的问题,诸如菜单.工具条.状态条.界面布局等不能实现配置化和自动化,子系统之间拥有强依赖, ...
- OSGi规范概要
目前最新的OSGi规范是2012年7月发布的Release 5,Version5.0(后文简称为R5.0)版本,该规范定义了Java模块化系统所涉及的各种场景(开发.打包.部署.更新和交互等),以及其 ...
- 开源协议:LGPL协议、OSGi协议---打酱油的日子
本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...
- 开源协议:LGPL协议、OSGi协议
本文介绍开源的协议. LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写形式,旧称 GNU Library General Publi ...
- OSGi——面向服务架构规范简述
OSGi——面向服务架构规范简述 去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi.以前我还没有听过OS ...
- Java模块化规范之争(转载)
经过近20年的发展,Java语言已成为今日世界上最成功.使用的开发者人数最多的语言之一,Java世界中无数商业的或开源的组织.技术和产品共同构成了一个无比庞大的生态系统. 与大多数开发人员的普遍认知不 ...
- OSGi 对软件复杂度的影响
出自 深度理解 osgi equinox 原理 1.2.1 OSGi 能让软件开发变得更容易吗 不可否认,OSGi 的入门门槛在 Java 众多技术中算是比较高的,相对陡峭的学习曲线会 为第一次使用 ...
- OSGI(面向Java的动态模型系统)
基本简介编辑 OSGI服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方.OSGi联 O ...
- OSGI框架学习
OSGI框架三个重要概念 OSGi框架是根据OSGi规范中定义的三个概念层设计的:模块.模块生命周期.服务. 模块层定义了OSGi模块的概念(bundle,即包含一个元数据MANIFEST.MF的JA ...
随机推荐
- 23种设计模式--建造者模式-Builder Pattern
一.建造模式的介绍 建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建 ...
- C#中如何调整图像大小
在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath(& ...
- 【NLP】Python NLTK处理原始文本
Python NLTK 处理原始文本 作者:白宁超 2016年11月8日22:45:44 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公开 ...
- ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑
原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...
- 【uwp】浅谈China Daily 中划词翻译的实现
学习uwp开发也有一段时间了,最近上架了一个小应用(China Daily),现在准备将开发中所学到的一些东西拿出来跟大家分享交流一下. 先给出应用的下载链接:China Daily , 感兴趣的童鞋 ...
- Android之文件数据存储
一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...
- A*算法应用[转]
转自:http://www.cnblogs.com/zhoug2020/p/3468167.html 这是一篇十分精彩/易懂的博客,感谢原博主!本文通过自己的理解在原博文基础上突出一些重点字眼,句子. ...
- 希尔排序(java)
时间复杂度为O( n^(3/2) )不是一个稳定的排序算法 如何看一个算法是否稳定:{("scala",12),("python",34),("c++ ...
- oracle常用的快捷键
最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他同事使用PLSQL 编程效率明显高于自己,观察了好久,才发现他使用PLSQL 已经很长时间了而且,他自己也在其中添加了好多快捷方式, 1.登 ...
- 【Java并发编程实战】-----“J.U.C”:CyclicBarrier
在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...