在写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

.NET应用加载容器Glue4Net的更多相关文章

  1. 深入理解 spring 容器,源码分析加载过程

    Spring框架提供了构建Web应用程序的全功能MVC模块,叫Spring MVC,通过Spring Core+Spring MVC即可搭建一套稳定的Java Web项目.本文通过Spring MVC ...

  2. 天猫首页迷思之-jquery实现整个div的懒加载(1)

    懒加载是众所周知的减少网页负载,提高性能的方法,不少大型用图片用的多的网站都用到了. 于是我网上一搜,得到一插件:jquery.lazyload    网址:http://www.appelsiini ...

  3. servlet与filter的加载顺序详解

     项目:3个filter,3个servlet,匹配的url路径/hello. 情况1:servlet没加<load-on-startup></load-on-startup>情 ...

  4. thinkPHP+LayUI 懒加载实现

    html <div class="layui-container" id="container"> </div> js,要引入layui ...

  5. 通过link的preload进行内容预加载

    Preload 作为一个新的web标准,旨在提高性能和为web开发人员提供更细粒度的加载控制.Preload使开发者能够自定义资源的加载逻辑,且无需忍受基于脚本的资源加载器带来的性能损失. <l ...

  6. WEB容器启动——web.xml加载详解

    最近在看spring的源码,关于web.xml文件在容器(Tomcat.JBOSS等)启动时加载顺序问题很混乱,通过搜集资料,得出以下的结论: 1.加载顺序与它们在 web.xml 文件中的先后顺序无 ...

  7. 为什么Pojo类没有注解也没有spring中配置<bean>也能够被加载到容器中。

    Spring的注入机制其实就是代替了new的这个过程(称为解耦). 写了一个Thread类,没有加注解@Component,但是可以正常运行,开始为了自圆其说,打通逻辑,猜测是StartThread中 ...

  8. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转

    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...

  9. 【Spring】Junit加载Spring容器作单元测试

    如果我们需要对我们的Service方法作单元测试,恰好又是用Spring作为IOC容器的,我们可以这么配置Junit加载Spring容器,方便做单元测试. > 基本的搭建 (1)引入所需的包 & ...

随机推荐

  1. Java IO 整理

    1.Java IO中的操作类之间的继承关系 2.在java中使用File类表示文件本身,可以直接使用此类完成文件的各种操作,如创建.删除 3.RandomAccessFile类可以从指定位置开始读取数 ...

  2. jQuery各类选择器

  3. Simple 杂题练手记

    Problem 1 世界上最可爱的珂朵莉 时间限制:C/C++ 1秒,空间限制:C/C++ 65536K 题目描述 我永远喜欢珂朵莉~! 有两个长为n的序列a[i]与b[i] 你可以把任意不多于x个a ...

  4. C++第四课:类的使用(二)[个人见解]

    前面说到C++类的名字自定义要有含义,成员函数名也同样如此. 一个好的程序员除了让自己能看懂代码外,那是能力,也能让别人看懂,那是本事. 我们来看第一个特性:继承! 什么是继承? 小编不说概念性的定义 ...

  5. 虚拟环境更新HA

    停止HA服务 sudo systemctl stop homeassistant@homeassistant 开始更新HA sudo -u homeassistant -H -s cd /srv/ho ...

  6. 20181117-python第二章学习小结-part1

    什么是二进制,十进制如何转化成二进制. 在python上可使用简单的函数进行转化,bin() 数据量的基本关系: 1bit  就是0/1的一个单位 1bytes = 8bit    #1个字节,就是一 ...

  7. appium定位

    一.链接基本信息 二.在appium界面中 三,定位 三.通过ui automator viewer抓取手机页面元素,点击红框按钮会抓取当前手机界面app全部元素;路径在sdk>tools下面的 ...

  8. 学习如何设置ssh安全只允许用户从指定的IP登陆

    参考原文链接:https://www.cnblogs.com/wuling129/p/5076081.html 因为在公司做项目时,员工的登录可能受到外界人的窃取,为了防止被攻击,设置系统只能允许用户 ...

  9. wait event & wake up

    在linux驱动中一个常用的场景, 驱动需要等待中断的响应, 才得以执行后续的代码,达到一个原子操作的目的 /* 静态申请队列 */ static DECLARE_WAIT_QUEUE_HEAD(s_ ...

  10. imagecreatefrombmp、imagebmp php处理bmp文件

    /*格式组成典型的BMP图像文件由四部分组成: 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及定义颜色等信息: ...