ESFramewor使用技巧(3) -- 在插件中使用Spring.net
2006-05-22 15:57
441 查看
根据插件的“自治”性,插件如果需要配置信息,则插件应该自己能读取和修改配置信息,而不是框架或宿主来完成这些事情。这种松耦合特性,我们曾在ESFramework介绍之(29)―― 插件公共设施 AddinUtil 一文中特别强调过。
当一个插件非常复杂时,可能需要大量的配置信息或装配信息,使用Spring.net的IOC容器实现自动装配是一种非常方便的方法,我们的插件需要自己来操作Spring.net容器,而不是依赖于框架或宿主应用。而且,宿主应用通常也有自己的复杂的配置需要管理。在ESFramewor使用技巧(2)-- 在插件中使用NHibernate 中,我们已经提到过类似的情况--我们可以为插件添加一个App.Config(或Web.Config)配置文件,但是FS在加载这个插件的时候,Spring.net不会去触碰这个插件对应的App.Config,这样Spring.net就无法自动完成配置。所以,我们必须手动的解决这个问题。
这个问题的解决方案需要注意三点:
(1)插件配置文件(即,插件用到的配置文件)的格式。
插件配置文件中不再需要<configSections>,也不再需要 <spring>/<context>,而是直接从<objects>开始,比如一个经过简化的名为BusinessManagerAddin.config的插件配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" >
<object name="keyNameMappingCollection" type="BusinessManagerAddin.KeyNameMappingCollection ,BusinessManagerAddin">
<property name="AdoBaseManager" ref="adoBaseManager"/>
</object>
<object name="adoBaseManager" type="BusinessManagerAddin.AdoBaseManager ,BusinessManagerAddin">
<property name="DataBaseType" value="Oracle"/>
</object>
</objects>
(2)手动注册插件配置文件:
我们知道,通常App.config中的spring配置,是由Spring自己自动注册的,而插件的配置文件,由于前面提到的原因,需要我们手动注册,就像这样:
FileSystemResource input = new FileSystemResource("Addins/BusinessManagerAddin.config") ;
Spring.Objects.Factory.IObjectFactory objFactory = new Spring.Objects.Factory.Xml.XmlObjectFactory(input);
通常,配置文件的注册可以在插件的生命周期OnLoading方法中进行。
(3)在宿主应用App.Config(或Web.Config)中添加探测路径。
我们通常将所有的插件放在AppBase目录下的Addins目录下。插件配置文件中的组件很多可能在插件自身中定义,如果没有在宿主的App.Config(或Web.Config)中添加对应的探测路径,Spring容器才创建组件对象时,会找不到对应的类型定义。所以我们需要像下面这样添加探测路径:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Addins"/>
</assemblyBinding>
</runtime>
其实,不仅仅是在插件中,你在任何dll中,如果这个dll需要使用自己的Spring配置文件,都可以通过上述介绍的解决问题。
转到 :ESFramework 可复用的通信框架(序)
当一个插件非常复杂时,可能需要大量的配置信息或装配信息,使用Spring.net的IOC容器实现自动装配是一种非常方便的方法,我们的插件需要自己来操作Spring.net容器,而不是依赖于框架或宿主应用。而且,宿主应用通常也有自己的复杂的配置需要管理。在ESFramewor使用技巧(2)-- 在插件中使用NHibernate 中,我们已经提到过类似的情况--我们可以为插件添加一个App.Config(或Web.Config)配置文件,但是FS在加载这个插件的时候,Spring.net不会去触碰这个插件对应的App.Config,这样Spring.net就无法自动完成配置。所以,我们必须手动的解决这个问题。
这个问题的解决方案需要注意三点:
(1)插件配置文件(即,插件用到的配置文件)的格式。
插件配置文件中不再需要<configSections>,也不再需要 <spring>/<context>,而是直接从<objects>开始,比如一个经过简化的名为BusinessManagerAddin.config的插件配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" >
<object name="keyNameMappingCollection" type="BusinessManagerAddin.KeyNameMappingCollection ,BusinessManagerAddin">
<property name="AdoBaseManager" ref="adoBaseManager"/>
</object>
<object name="adoBaseManager" type="BusinessManagerAddin.AdoBaseManager ,BusinessManagerAddin">
<property name="DataBaseType" value="Oracle"/>
</object>
</objects>
(2)手动注册插件配置文件:
我们知道,通常App.config中的spring配置,是由Spring自己自动注册的,而插件的配置文件,由于前面提到的原因,需要我们手动注册,就像这样:
FileSystemResource input = new FileSystemResource("Addins/BusinessManagerAddin.config") ;
Spring.Objects.Factory.IObjectFactory objFactory = new Spring.Objects.Factory.Xml.XmlObjectFactory(input);
通常,配置文件的注册可以在插件的生命周期OnLoading方法中进行。
(3)在宿主应用App.Config(或Web.Config)中添加探测路径。
我们通常将所有的插件放在AppBase目录下的Addins目录下。插件配置文件中的组件很多可能在插件自身中定义,如果没有在宿主的App.Config(或Web.Config)中添加对应的探测路径,Spring容器才创建组件对象时,会找不到对应的类型定义。所以我们需要像下面这样添加探测路径:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Addins"/>
</assemblyBinding>
</runtime>
其实,不仅仅是在插件中,你在任何dll中,如果这个dll需要使用自己的Spring配置文件,都可以通过上述介绍的解决问题。
转到 :ESFramework 可复用的通信框架(序)
相关文章推荐
- ESFramewor使用技巧(3) -- 在插件中使用Spring.net
- Intellij Idea 中 Spring JPA 相关插件使用技巧
- Spring.NET实用技巧1——基于Prevalence下的NHibernate二级缓存使用技巧
- ESFramewor使用技巧(2)-- 在插件中使用NHibernate
- Intellij Idea 中 Spring JPA 相关插件使用技巧
- ESFramewor使用技巧(2)-- 在插件中使用NHibernate
- 【转】VC++.net 整合开发环境使用技巧
- ADO.NET在开发中的部分使用方法和技巧
- Visual Studio .NET使用技巧手册读书笔记之使用VS.NET 2005
- 在DotNetNuke模块里面使用Jquery插件的方法(转)
- 使用Spring.net中对Ado.net的抽象封装来访问数据库
- ASP.NET中使用附文本框插件
- Spring.NET实用技巧2——NHibernate访问Oracle数据库
- FireFoxy有用的插件和使用技巧
- 使用.NET Reflector插件FileDisassembler还原源码!
- select2插件-简单技巧使用心得
- Sublime text插件使用技巧
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
- 一则spring中使用PropertyEditors 来注入日期型属性的技巧
- ASP.NET学习笔记之VS操作使用技巧