我已經編寫了一個ASP MVC應用程序的插件解決方案基於本網站上的建議,但是,我已經到了一個障礙,並希望得到一些幫助。不用太深入瞭解插件系統的工作原理,它會成功加載控制器並找到適當的視圖 - 問題在於視圖無法編譯,因爲它無法解析所有插件的引用(插件DLL引用了其他主機應用程序不知道的DLL)。添加引用到ASP MVC頁面編譯引擎
我在CurrentDomain上使用AssemblyResolve,但在默認BuildManager編譯視圖時未調用,而是從web.config部分獲取程序集列表。如果我將所有插件文件添加到GAC並在該部分中添加引用 - 它工作正常。但是,如果我必須爲每個插件更改web.config,那麼這會破壞擁有插件系統的目的。
小插圖來解釋這個問題: Plugin.dll --references - > PluginServices.dll
URL http://mysite.com/some/index MVC應用--load - > Plugin.dll PASS
MVC應用程序--load - > Plugin.SomeController PASS
MVC應用--find - >插件\視圖\一些\的Index.aspx PASS
MVC應用--compile - >的Index.aspx FAIL(第e查看使用來自PluginServices的一種無法找到的類型)
有沒有一種方法可以動態地添加對BuildManager的引用,以便編譯通過而不會改變web.config?
在此先感謝!
感謝您的回覆,但這並沒有真正的工作,因爲問題是當ASP試圖實際呈現頁面並解析引用時,它無法找到關聯的DLL。 – Gil 2009-06-04 00:09:57
如果您沒有可用插件接口的實現(即使它只是一個存根或單元測試模擬),您如何期望應用程序運行? – 2009-06-04 01:23:53
該實現是在運行時交付給插件的另一個程序集。插件只知道它使用的對象的接口,以及服務層在運行時使用真實對象的子接口。問題是當主機應用程序在插件中呈現視圖時,它無法解析接口名稱。 – Gil 2009-06-04 02:18:57