(外掛程式Plugin)AssemblyLoader解決方案(外掛程式開發)

來源:互聯網
上載者:User

     根據設計模式的原則:1.針對介面編程,而不是針對實現編程。2.優先使用對象組合,而不是類繼承。3.封裝變化點。

根據上面三個主要的原則,我們我可通過封裝變化來減少代碼的改動。(通過設定檔來封裝變化)。

但是當我們更改設定檔的時候就需要重新載入就會引起重新啟動應用程式。為了能夠在運行時動態修改設定檔後而不需要重新啟動且能立即生效的話,我們就可以用外掛程式來實現。然而是針對.net而言,我們可以把載入的外掛程式放到不同的AppDomain中去,這樣就可以防止當外掛程式配置發生更改的時候而不需要重新啟動就能使整個應用程式重新生效。

所以:我們需要把具體的目錄放到增益集集,我們可以用Assembly.Load()通常運行良好,但是程式集無法獨立卸載(只有Appdomain可以),這意味著如果你正在編寫伺服器,而且你希望使用者無需啟動和定製伺服器即更新他們的增益集。那麼你將無法使用預設的Appdomain實現此任務。要實現此功能,我們加在一個獨立的Appdomain中載入所有增益集集。當添加或修改檔案時,我們將卸載Appdomain,建立新的Appdomain,然後將當前檔案載入到其中。

 

根據這個思想,可以考慮以下解決方案:

我們看看外掛程式的配置:

<configuration>
  <Assemblies>
    <PluginAssembly AssemblyName="TestXML.exe" AssemblyPath="D:\Downloads\AssemblyLoader\TestXML\bin\Debug\">
      <Formats>
        <FormatAdapter TypeName="TestXML.Program" RouterTypeName="GetData" />
        <FormatAdapter TypeName="TestXML.Program" RouterTypeName="GetName" />
      </Formats>
    </PluginAssembly>
    <PluginAssembly AssemblyName="LibTest.dll" AssemblyPath="D:\Downloads\AssemblyLoader\LibTest\bin\Debug\">
      <Formats>
        <FormatAdapter TypeName="LibTest.Class1" RouterTypeName="GetData" />
        <FormatAdapter TypeName="LibTest.Class1" RouterTypeName="GetData" />
      </Formats>
    </PluginAssembly>
  </Assemblies>
</configuration>

上面的設定檔是外掛程式的配置:(當然可以進行擴充)

下面簡單介紹下配置的大體意思:

PluginAssembly節點表示一個外掛程式:

AssemblyName:外掛程式的名稱(也就是.exe或.dll)

AssemblyPath:外掛程式配置的路徑(AssemblyName所在檔案的路徑)

Formats:需要在AssemblyName檔案中調用的資訊

TypeName:指的是AssemblyName的類型定義。

RouterTypeName:指TypeName中方法的定義。

所有上面的設定檔就代表應用程式執行的順序是這樣的:

1.(TextXML.exe)TextXML.Program類中的GetData方法.

2.(TextXML.exe)TextXML.Program類中的GetName方法

3.(LibTest.dll)LibText.Class1類中的GetData方法(因配置一樣,所以這個方法將調用兩次)

 

 Charles Chen

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.