C# 在MEF中使用共享和非共享创建策略时使用子容器?

C# 在MEF中使用共享和非共享创建策略时使用子容器?,c#,.net,mef,C#,.net,Mef,因此,我遇到了一个问题,我的一个长期运行的进程在内存中变得相当大。在得到一个stackdump并查看堆之后,我注意到我正在使用的compositioncontainer变得相当大。我使用的是一个静态容器,我以为我所有的作品都被标记为共享,但遗憾的是,我可能错过了一些 但这让我研究了如何处理共享和非共享之间的关系,我注意到,对于非共享的情况,很多时候人们使用子容器来满足导入,然后进行处理,使其不会变大。。所以我沿着这条路走,找到了这个手巧的家伙 要基于共享和非共享导出创建筛选的目录 但我遇到的问

因此,我遇到了一个问题,我的一个长期运行的进程在内存中变得相当大。在得到一个stackdump并查看堆之后,我注意到我正在使用的compositioncontainer变得相当大。我使用的是一个静态容器,我以为我所有的作品都被标记为共享,但遗憾的是,我可能错过了一些

但这让我研究了如何处理共享和非共享之间的关系,我注意到,对于非共享的情况,很多时候人们使用子容器来满足导入,然后进行处理,使其不会变大。。所以我沿着这条路走,找到了这个手巧的家伙

要基于共享和非共享导出创建筛选的目录

但我遇到的问题是,我遇到了一个拒绝异常,在具有共享导入的对象上满足导入。。。所以如果我这样做了

NonSharedChildContainer.SatisfyImportsOnce(someObject)
我得到一个拒绝异常,因为其中有一个属性上有一个共享导入。。。如果您有一个包含共享导入和非共享导入的对象,那么实际上没有办法使用子容器以这种格式进行合成

我唯一想做的就是 1) 检查我的代码并使用GetExport而不是satisfyimports
2) 我可能会使MEF过载,因为我把它当作我们的IoC容器,我知道一直有很多关于它的讨论。。。所以最好只使用Unity或类似的东西,默认情况下合成是共享的。是的,我知道,但是如果我有一个用非共享创建策略标记的导入和一个用共享创建策略标记的导入,那么我就不可能使用childcontainers来实现使用SatisfyImports的导入,因为“非共享"只有非共享目录的容器将抛出拒绝异常,试图满足共享组件。默认情况下,组件是共享的。是的,我知道,但是如果我有一个用非共享创建策略标记的导入和一个用共享创建策略标记的导入,那么我不可能使用childcontainers来实现这一点使用SatisfyImports导入,因为只有非共享目录的子“非共享”容器将在尝试满足共享组件时引发拒绝异常