当应用程序结束时遇到问题,容器没有调用部件的Dispose方法。 基于MEF的应用。
当我显式调用Dispose容器时,会在部件上调用matod Dispose,但是如果你只关闭程序,则不会调用部件的Dispose,为什么? 如何确保关闭程序时是由容器MEF的所有部分的Dispose方法引起的?
[Export(typeof(IMyClass))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class MyClass: IDisposable, IMyClass
{
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)
{
// Dispose managed resources.
}
disposed = true;
}
}
~MyClass()
{
Dispose(false);
}
}
答案 0 :(得分:2)
当我显式调用Dispose容器时,会在部件上调用matod Dispose,但如果你只关闭程序,则不会调用部件的Dispose,为什么?
因为必须在完成后处置容器。如果您的程序在退出之前没有调用CompositionContainer.Dispose(),那么这是程序中的错误。
答案 1 :(得分:0)
Wim Coenen ,谢谢,我认为MEF的破坏必须在部件上调用Destruct。 我确保以我需要的方式工作:
public partial class MyBootstrapper : MefBootstrapper
{
public MyBootstrapper()
{
App.Current.Exit += new ExitEventHandler(Current_Exit);
}
void Current_Exit(object sender, ExitEventArgs e)
{
if (this.Container != null)
this.Container.Dispose();
}
...