Я столкнулся с проблемой, когда приложение заканчивается, контейнер не вызывает метод Dispose для частей.
Приложение на основе MEF.
Когда я явно вызываю Dispose для контейнера, тогда matod Dispose вызывается для деталей, но если вы просто закроете программу, Dispose для частей не будет вызываться, почему?
Как убедиться, что при закрытии программы были вызваны методом Dispose всех частей контейнера MEF?
[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);
}
}