【发布时间】:2012-03-23 14:51:04
【问题描述】:
我在应用程序结束时遇到了一个问题,容器没有调用部件的 Dispose 方法。 基于MEF的应用。
当我显式调用Dispose容器时,在parts上调用了matod Dispose,但是如果你只是关闭程序,不会调用parts的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);
}
}
【问题讨论】:
-
您的“部件”不需要在程序退出时处理。
-
比如段子里有一个线程,不是后台,而这个线程应该是正确的停止方式,你要怎么做呢?
标签: c# containers mef dispose