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

C# 是否有可以加载和卸载程序集的.NET IoC容器,c#,mef,autofac,C#,Mef,Autofac,我正在拼命寻找一个容器来完成这个任务 我希望在部署程序集中包含的新的或更新的业务规则时,让AS.NET网站运行,而不是卸载/回收AppDomain。这意味着该文件夹位于bin文件夹之外,最好在其上方,而不是下方(尽管我可以接受)。到目前为止,我看到的壁橱使用的是Autofac和MEF,但似乎无法卸载以前加载的程序集 有人能给我指点什么资源吗 谢谢,, 斯蒂芬:不,没有。由于无法卸载程序集,因此只能卸载整个appdomain。这是一个.NET运行时限制-由于每个.NET IOC容器都必须位于.NE

我正在拼命寻找一个容器来完成这个任务

我希望在部署程序集中包含的新的或更新的业务规则时,让AS.NET网站运行,而不是卸载/回收AppDomain。这意味着该文件夹位于bin文件夹之外,最好在其上方,而不是下方(尽管我可以接受)。到目前为止,我看到的壁橱使用的是Autofac和MEF,但似乎无法卸载以前加载的程序集

有人能给我指点什么资源吗

谢谢,,
斯蒂芬:不,没有。由于无法卸载程序集,因此只能卸载整个appdomain。这是一个.NET运行时限制-由于每个.NET IOC容器都必须位于.NET运行时中,因此不能绕过它


如果您的导入足够大,那么将它们隔离在单独的AppDomain中可能是一个好主意。

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

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


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

指出,作为设计决策,永远不可能从活动AppDomain卸载程序集,并试图解释原因。我想这是否是充分的理由取决于你,但它确实使这个想法看起来像是一个不可能实现的想法。这是.NET的一个限制。无法卸载程序集。如果要卸载程序集,需要终止整个AppDomain。这超出了IoC容器的范围-您正在寻找自定义web服务器,因为AppDomain代表整个web应用程序。您只能使用AppDomain自己完成这项工作。请参考这里的内容:MEF旨在提供可扩展性,而不是隔离性。MAF(托管外接程序框架)旨在提供隔离,从承载“外接程序”的单个进程内AppDomain到多个进程外主机。从IoC容器中对该功能的需求可能不多的问题来看。是的,我知道创建一个单独的AppDomain是唯一可行的解决方案,我只是想知道是否有人已经开辟了这条道路。是的,很多人都有。IIS就是这样工作的。我现在就写了一份申请书。这并不是很难,也不是很罕见的事情。关于你是如何做到这一点的,你有什么可以分享的资源吗?+1@TomTom-你真的在构建真正的IoC,将所有接口封送到唯一的AppDomains吗?(IIS并不是IoC容器的真正样本——它实际上是两个彼此之间几乎没有通信的独立部分)。我的使用从接口上来说是非常有限的,在消息队列输入和输出的末尾。