2014-07-25 17 views
3

我在靠牆試圖找到一個容器來完成這個任務。有沒有可以加載和卸載程序集的.NET IoC容器

當我部署包含在程序集中的新的或更新的業務規則時,我想要做的是運行AS.NET網站並且不卸載/回收AppDomain。這意味着該文件夾在bin文件夾之外,最好在它之上,不在它之下(儘管我可以忍受它)。到目前爲止,我已經使用過Autofac和MEF,但似乎沒有辦法卸載以前加載的程序集。

任何人有任何資源,他們可以指向我?

謝謝 斯蒂芬

+3

[本文](http://blogs.msdn.com/b/jasonz/archive/2004/05/31/145105.aspx)表明,不可能從一個活着的AppDomain卸載程序集作爲設計決定 - 並試圖解釋原因。由你決定是否有足夠的理由我認爲,但它確實使這個想法看起來像一個非起動器。 –

+4

這是.NET的限制。您無法卸載程序集。如果你想卸載程序集,你需要終止整個AppDomain。這超出了IoC容器的範圍 - 您正在尋找自定義Web服務器,因爲AppDomain代表了整個Web應用程序。 –

+0

你只能用AppDomain自己做。請參考此處:http://www.codeproject.com/Articles/633140/MEF-and-AppDomain-Remove-Assemblies-On-The-Fly –

回答

5

沒有,沒有。由於無法卸載程序集,因此只能使用一個完整的AppDomain。這是一個.NET運行時限制 - 因爲每個.NET IOC容器都必須存在於.NET運行時中,所以它無法繞過它。

如果您的進口足夠大,將它們隔離在單獨的應用程序域中可能是一個好的和可行的想法。

+0

是的,我知道這是創建一個單獨的AppDomain是唯一合理的解決方案,我只是想知道是否有人已經開闢了這條線索。 –

+0

是的,很多人都有。 IIS就是這樣工作的。我現在寫一個應用程序。這並不難,也不是非常罕見的東西。 – TomTom

+0

是否有任何資源可以分享您如何接近它? –

2

無法卸載.Net中的程序集而無需卸載整個AppDomain。所以允許它的唯一方法是將新程序集加載到新的AppDomain中。

雖然有可能構建這樣的IoC容器,它會將許多接口的所有請求封送到新的AppDomain,因此這些代碼會對接口公開的方法/對象施加非常重要的限制。許多.Net對象不能跨AppDomain邊界(xml,UI /控件,HTML上下文,數據庫相關的類)。

允許ASP.Net處理AppDomain的重新加載顯然更容易。

相關問題