.NET应用加载容器Glue4Net
在写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() { } }
测试
源代码
访问Beetlex的Github