Spring.net 的IOC 容器 实现动态加载程序集

项目需求:

需要远程下载程序集,且不保存到程序目录。

因此: <object id=”person” type=”TypeName, AssemblyName”></object>的方式无法实现配置文件。因为我们的程序集是直接加载到 AppDomain.CurrentDomain 里的
看 Spring的ResolveType逻辑(Spring.Core.TypeResolution.TypeResolver 中的Resolve方法)
如果不写AssemblyName

<object id=”person” type=”TypeName”></object>
那么会从AppDomain.CurrentDomain 中已经加载的程序集中查找 TypeName。就达到我们的需求了。

步骤分成三步:
1、下载并读取程序集到Byte[]数组
2、用Assembly.load()方法加载程序集的数组
3、配置Spring没有AssemblyName的写法

这就实现了使用Spring实现程序集动态加载。

下面会有另外一个问题,下载的程序集也需要Spring的配置文件,切我们不知道程序集里的逻辑,那配置文件也需要远程提供。这样一来,又需要整合多个Spring配置文件
我的步骤:
1、下载远程的程序集及程序集自带的配置文件
2、配置文件放到一个临时目录
3、整合已前面的一个AplicationContext 和新的配置文件
关键代码:IApplicationContext ctx = new XmlApplicationContext(parent, new string[]{“…”,”…”}) domain name data

发表评论