OSGi規範的C#實現開源

這是大約在3-4年前完成的一個C#實現的OSGi框架,實現的過程參照了OSGi規範與與一些實現思路(感謝當時的那些資料與項目),此框架雖然僅在幾個小型項目有過實際的應用,但OSGi的規範實現仍是相對比較完整的,包涵了一些基本的要素,因爲我的的項目重心已經轉移,如今打算把它公開出來,供你們參考:git

OSGi.NET框架是一個參照了OSGi規範的模塊化管理框架。框架爲應用程序擴展(組件(bundle))提供了一個標準環境。整個框架能夠劃分爲一些層次:github

  • 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/]目錄或在共享清單配置。spa

Intro: http://www.diginfo.me/osgi-net-implement日誌

源代碼 https://github.com/FreezeSoul/OSGi.NETxml

說明文檔 https://github.com/FreezeSoul/OSGi.NET/blob/master/OSGi.NET%20Client/Help/Help/Documentation.chm?raw=true接口

相關文章
相關標籤/搜索