ESFramework使用技巧(3) - 在插件中使用Spring.net

根据插件的“自治”性,插件如果需要配置信息,则插件应该自己能读取和修改配置信息,而不是框架或宿主来完成这些事情。这种松耦合特性,我们曾在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="" >
  <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配置文件,都可以通过上述介绍的解决问题。

时间: 2024-10-31 04:45:07

ESFramework使用技巧(3) - 在插件中使用Spring.net的相关文章

ESFramewor使用技巧(3) -- 在插件中使用Spring.net

    根据插件的"自治"性,插件如果需要配置信息,则插件应该自己能读取和修改配置信息,而不是框架或宿主来完成这些事情.这种松耦合特性,我们曾在ESFramework介绍之(29)―― 插件公共设施 AddinUtil 一文中特别强调过.    当一个插件非常复杂时,可能需要大量的配置信息或装配信息,使用Spring.net的IOC容器实现自动装配是一种非常方便的方法,我们的插件需要自己来操作Spring.net容器,而不是依赖于框架或宿主应用.而且,宿主应用通常也有自己的复杂的配置需

ESFramework使用技巧(2) - 在插件中使用NHibernate

我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用一个功能插件来完成.在这几个插件中,有个插件需要访问某个数据库,并且只有这个插件需要访问这个数据库,根据插件的"自治"性质,你不想将本插件中的数据访问"上升蔓延"到应用程序(FS),而是让它"仅仅"在本插件中,这样,无论是对FS还是插件都是有好处的--FS自己不需要访问数据库(日志记录除外),插件"自治

ESFramewor使用技巧(2)-- 在插件中使用NHibernate

    我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用一个功能插件来完成.在这几个插件中,有个插件需要访问某个数据库,并且只有这个插件需要访问这个数据库,根据插件的"自治"性质,你不想将本插件中的数据访问"上升蔓延"到应用程序(FS),而是让它"仅仅"在本插件中,这样,无论是对FS还是插件都是有好处的--FS自己不需要访问数据库(日志记录除外),插件&quo

VB.net技巧之七----asp.net中cookie的使用

asp.net|cookie|技巧 在asp.net中cookie的用法与asp中是有一些不一样的.开始我用asp中的用法,老是出错.试了多次后,才发现应该在asp.net中应该这样用.       首先,要定义一个 HttpCookie         Dim  acookie As New HttpCookie("amtek")        然后可以向其中的添加一个名为"name"的项,值为"itone"       acookie.Val

请问哪位大侠知道如何读取max插件中的纹理路径哈

问题描述 请问哪位大侠知道如何读取max插件中的纹理路径哈 我将一个revit模型转换成FBX格式,然后在max2014中打开,这个模型包含多种材质,其中一种材质里面还包含纹理信息,但是该纹理没有存储到普通位图中,而是存在了,如下图所示的选项中.这样就造成我在做max插件时,无法通过材质Texmap的GetMapname()函数来获取了纹理路径名字了.我找了好久,查了好多资料都没有找到获取纹理路径的方法.请问有哪位大侠能够指点一下哈,不胜感激~~

js-jqGrid 插件中的“*”不显示。从后台查询到的数据是“孟**”,但是只显示了“孟”

问题描述 jqGrid 插件中的"*"不显示.从后台查询到的数据是"孟**",但是只显示了"孟" 用jqGrid的数据表格中,不显示星号了,但是从后台查询的数据是带星号的. 解决方案 看下有没有转义,看下源代码等 解决方案二: VC中ComboBox下拉列表不显示数据或只显示一行问题VC中ComboBox下拉列表不显示数据或只显示一行问题

《Android平板电脑开发秘籍》——3.4节技巧:在ActionBar中显示Action项

3.4 技巧:在ActionBar中显示Action项 Android平板电脑开发秘籍 为了在ActionBar中显示Action项,需要给菜单项添加android:showAsAction属性,菜单项定义于Menu文件中.showAsAction属性决定了如何显示Action项.showAsAction属性可以是以下值. always--在ActionBar中显示此Action项. ifRoom--仅当空间允许时,才在ActionBar中显示此Action项.如果没有足够的空间,此项将显示在O

如何在插件里渲染另一个插件中的vm文件?

问题描述 我写了一个插件,想使用TemplateRenderer接口渲染存放在另一个插件中的vm模板文件,不知道那位高手能解答一下.

SQL Server优化技巧之SQL Server中的&quot;MapReduce&quot;

原文:SQL Server优化技巧之SQL Server中的"MapReduce" 日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的"类MapReduce"方式,在特定的统计情形中不牺牲响应速度的情形下减少资源消耗. 我们可能经常会利用开窗函数对巨大的数据集进行分组统计排序.比如下面的例子: 脚本环境 /* This script creates two new