在显示主窗口之前,我有一个带有登录窗口的 wpf 应用程序。
我使用 mef 加载所有模块/部件。在主窗口启动之前,我根据我显示的部分检查用户登录数据。共享和非共享的部分。
[ImportMany]
private IEnumerable<Lazy<IComponent, IComponentMetadata>> _components;
[ImportMany("Resourcen", typeof(ResourceDictionary))]
private IEnumerable<ResourceDictionary> _importResourcen;
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
_mefcontainer = new CompositionContainer(catalog);
_mefcontainer.ComposeParts(somepartwithaSharedExport, this);
这一切都很好。但现在我尝试了“重新登录”。
_mefcontainer.Dispose();
_mefcontainer = null;
//here the stuff that works from above
首先我认为它有效,但似乎我第一次创建的部分仍然存在于内存中,我没有机会“杀死”它们。所以当我重新登录足够多次时,我得到了 OutOfMemory 异常。
这就是为什么我现在使用这种方法
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
App.ShutDown();
我对此不满意。
有没有办法清理 Compositioncontainer 并创建一个新的?