.NET應用載入容器Glue4Net

smark發表於2014-01-14
在寫ASP.NET的應用的時候我們只需要把寫好的WEB程式放到IIS即可,在更新的時候只需要把檔案複製過去IIS就可以自動重新載入相關WEB程式。如果是寫一些win服務程式或一個服務端應用程式就沒有這麼幸運,在更新的時候由於檔案被佔用導致在更新前不得不把相關服務停止;這樣導致程式更新非常麻煩,如果程式只有一兩個還可以但是服務程式比較多的情況那則是相應麻煩的事情,為了解決這一系列問題所以實現Glue4Net這樣一個應用載入元件。

功能

元件的主要功能是構建一個新的AppDomain載入指定目錄的程式集具體功能如下:

  • 自動載入目錄的.NET程式集
  • 自動載入目錄下的程式碼檔案並新增到應用域中
  • 自定義監控檔案變更,變更重新載入相應的服務
  • 自定義應用模組,在載入的自動執行。

使用

元件的使用非常簡單,只需要構建DomainAdapter並指定相關引數即可:

            DomainAdapter da = new DomainAdapter(@"C:\Test",
                "TEST", new DomainArgs { Compiler=true, UpdateWatch= true, WatchFilter=new string[]{"*.cs"} });
            da.Log = new ConsoleEventLogImpl();
            da.Load();

以是上是從C:\Test目錄上構建一個應用域,並指定相應的載入引數;具體引數描述是編譯目錄下的cs和vb檔案,啟用對*.cs的檔案進行監控,當發現有檔案變更的情況重新載入應用。

應用構建規則

由於應用是通過元件載入,所以應用的編寫需要遵循一些規則,應用目錄下必須存在Glue4Net.dll和Log4net.dll.元件在載入應用後會自動執行應用中實現IAppModule的物件。對於應用的編寫可以編譯成DLL或直接在應用目錄下存放相應的程式碼檔案即可。

using System;    
public class TestModule : Glue4Net.IAppModule
    {

        public string Name
        {
            get {return "TEST"; }
        }

        public Glue4Net.IEventLog Log
        {
            get;
            set;
        }

        public void Load()
        {
            Log.Info("Module loaded!",DateTime.Now);
	    int a =0;
	    Log.Info(a.ToString());
        }

        public void UnLoad()
        {
           
        }
    }

測試

原始碼

https://github.com/IKende/IKendeLib/tree/master/Glue4Net

相關文章