是否有可以加载和卸载程序集的.NET IoC容器

时间:2014-07-25 16:30:32

标签: c# mef autofac

我正在靠墙试图找到一个可以实现这一目标的容器。

我想要做的是运行AS.NET网站,而不是在部署程序集中包含的新的或更新的业务规则时卸载/回收AppDomain。这意味着该文件夹位于bin文件夹之外,并且最好在它之上,而不是在它之下(尽管我可以忍受它)。我到目前为止所使用的壁橱是使用Autofac和MEF,但似乎没有办法卸载以前加载的组件。

有人可以指点我的资源吗?

谢谢你, 斯蒂芬

2 个答案:

答案 0 :(得分:6)

不,没有。因为无法卸载程序集,所以只有一个appdomain。这是一个.NET运行时限制 - 因为每个.NET IOC容器都必须存在于.NET运行时,所以它无法绕过它。

如果您的导入足够大,将它们隔离在单独的应用程序域中可能是一个好的和可行的想法。

答案 1 :(得分:3)

如果不卸载整个AppDomain,就无法在.Net中卸载程序集。因此,允许它的唯一方法是将新程序集加载到新的AppDomain中。

虽然有可能构建这样的IoC容器,它将为许多接口封送所有对新AppDomain的请求,但这些代码会对接口公开的方法/对象施加非常大的限制。此外,许多.Net对象无法跨越AppDomain边界(xml,UI /控件,HTML上下文,数据库相关类)。

允许ASP.Net处理AppDomain的重新加载要容易得多。