这是实现的一套基于OSGi规范的C#基础框架-OSGi.NET,并且用Go语言初步实现了插件的管理平台-插件仓库。在几个中小型项目中有所应用(Winform、WPF),主要可以解决多人协作的开发规范与插件的管理问题。
更多说明: http://www.diginfo.me/osgi-net-implement
简介:
OSGi.NET框架是一个参照了OSGi规范的模块化管理框架。框架为应用程序扩展(组件(bundle))提供了一个标准环境。整个框架可以划分为一些层次:
运行环境
模块(Bundle)
生命周期管理
服务注册
扩展点支持
目前OSGi.NET具有如下特色:
组件的可插拔性:组件可根据业务需要在运行时进行装载、卸载操作
组件的动态更新:组件在运行时可更新替换当前版本
组件的版本隔离:不同组件引用相同产品的不同版本程序集可以版本隔离
组件完整的生命周期:包括已安装、已装载、已激活、启动中、停止中、已卸载
组件的加载顺序:组件加载根据业务要求可设置加载级别来控制加载次序
组件的通信支持:组件间通过面向服务的编程模型来达到组件间通信、调用的目的
组件的扩展支持:组件提供了扩展点及其扩展来满足某个组件的扩展性支持
启动一个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项目需要:
引用框架内核程序集OSGi.NET.dll
添加框架内核配置文件OSGi.NET.properties
如需要日志支持,添加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引用程序集搜索原则:
根据加载的Bundle引用程序集,依据程序集名称+版本号匹配原则,优先从[/程序目录/Libs/]目录或共享清单中搜索。
如第一步无匹配,则根据程序集名称从[/程序目录/Bundles/模块A/Libs/*.dll]目录搜索,并将搜索到的程序集对应版本关联Bundle。
各Bundle下Libs目录程序集在加载中做了Bundle间的隔离,确保不同的Bundle引用的程序集间不会造成影响。即:如存在共享程序集请放置[/程序目录/Libs/]目录或在共享清单配置。
osgi.net是一个动态的模块化框架。它向用户提供了模块化与插件化、面向服务构架和模块扩展支持等功能。该平台是OSGi联盟定义的服务平台规范移植到.NET的实现。 简介 尤埃开放服务平台是一个基于.NET平台的动态的模块化中间件,它主要向用户提供了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和移动平台等各种.NET环
osgi.net是一个动态的模块化框架。它向用户提供了模块化与插件化、面向服务构架和模块扩展支持等功能。该平台是OSGi联盟定义的服务平台规范移植到.NET的实现。 简介 尤埃开放服务平台是一个基于.NET平台的动态的模块化中间件,它主要向用户提供了模块化与插件化、面向服务架构和模块扩展三大功能,适用于控制台、WinForm、Windows服务、WPF、ASP.NET和移动平台等各种.NET环
1. 关于OSGI.NET 在介绍 OSGI.NET 前先介绍下OSGi, OSGI全称为Open Service Gateway Initiative,它一方面指由IBM、Oracle、BEA、SAP等国际IT巨头组成的OSGi联盟组织;另一方面指该组织制定的一个基于Java语言的服务规范——OSGi服务平台。而OSGi.NET是OSGi R4.2规范移植到.NET平台的实现,是一个动态模块化框
OSGI.NET发布网站(包含相关插件) A、按正常发布网站的方式,发布主程序(宿主),步骤如下: 1.选择要发布的网站“右键”-》“发布” 2.配置文件——新建自定义配置文件(名称随意) 3.连接——发布方法(选择“文件系统”)、目标位置(目录自定义) 4.设置——配置(选择“Release”) 5.预览——选择刚刚新建的配置文件,点击发布就OK了。 B、发布主程序(宿主)下
第三方页内容由手百或第三方浏览器框架承载,以下是典型的结构示意,与其他浏览器的框架结构基本一致,在功能样式上可能有细节差别。 基准线和栅格能够让Web页面更有秩序,有利于进行页面布局。类似音乐训练中使用节拍来辅助节奏把握。 垂直方向采用4点基准线栅格来限定⻚面元素的高度,水平方向采用4/12列流式栅格辅助限定元素的宽度。 Web页面设计需要兼顾水平和垂直两个方向的页面元素布局。 4点基准线的基本单
基本代码规范 本篇规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。 关于「能愿动词」的使用 为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下: 必须 (MUST):绝对,严格遵循,请照做,无条件遵守; 一定不可 (MUST NOT):禁令,严令禁止; 应该 (SHOULD) :强烈建议这样做,但是不强求; 不该 (SHOULD NOT):强烈不建议这样做
这些插件是形成其他插件的基本构建模块.你可以在你的构建文件中使用它们,在下面李处完整地列表,然而,注意它们还不是Gradle的公用API的一部分.因此,这些插件未记录在用户指南中.你可能会参考他们的API文档,详细了解它们. Table 22.7. Base plugins base 添加标准的生命周期任务和配置合理的默认归档任务: 增加ConfigurationName任务.这些任务组装指定配置
概述 环境配置 程序结构 基本语法 数据类型 类型转换 变量 常量和文字 运算符 判断 循环 封装 方法 可空类型 数组 字符串 结构体 枚举 类 继承 多态性 运算符重载 接口 命名空间 预处理指令 正则表达式 异常处理 文件 I/O
数据类型说明 数据类型 16位平台 32位平台 64位平台 char 1 字节 1 字节 1 字节 pointer 2 字节 4 字节 8 字节 short 2 字节 2 字节 2 字节 int 2 字节 4 字节 4 字节 float 4 字节 4 字节 4 字节 double 8 字节 8 字节 8 字节 long 4 字节 4 字节 8 字节 long long 8 字节 8 字节 8 字节
RoadMap 指针与引用 左值引用与右值引用 C++专题-左值与右值 static 与 const https://github.com/huihut/interview#const static 作用 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。 修饰普通函数,表明函数
主要内容:基础类的功能如果您参考Apple文档,应该会看到框架的详细信息,如下所示。 框架定义了Objective-C类的基础层。 除了提供一组有用的原始对象类之外,它还引入了几个定义Objective-C语言未涵盖的功能的范例。 框架的设计考虑了这些目标 - 提供一小组基本实用程序类。 通过为解除分配等事项引入一致的约定,使软件开发更容易。 支持Unicode字符串,对象持久性和对象分发。 提供一定程度的操作系统独立
当你定义一个类,你实际上定义的是一个数据类型的蓝图。实际上你并没有定义任何数据,但是它定义了类的名字意味着什幺。也就是说,一个类的对象由一些可以在该类上进行的操作构成。对象是类的实例。构成类的方法和变量被称为类的成员。 定义一个类 一个类定义以关键字 class 开始,其后跟的是类的名称;类的主体部分体由一对花括号括起来。以下是一个类定义的一般形式: class class_name {