天天看點

ESFramewor使用技巧(3) -- 在插件中使用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配置檔案,都可以通過上述介紹的解決問題。