If you are creating a class that hold unmanaged resources or 'fat' managed resources you want released immediately (instead of waiting for the GC), you can implement them like this pattern or like this:
In the project, define these two classes:
public interface IDisposer : IDisposable
{
void Initialize(Action
public class Disposer : IDisposer
{
private readonly Action
public void Initialize(Action
{
_disposeCallback = disposeCallback;
}
public void Dispose()
{
_disposeCallback(true);
}
}
}
public interface IDisposerFactory : IDisposable
{
IDisposer Create(Action
}
Then use this pattern when defining new class that have the unmanaged/fat resources:
pubic class YourBuggyClass : IDisposable
{
private readonly IDisposer _disposer;
public YourBuggyClass(IDisposerFactory disposerFactory)
{
_disposer = disposerFactory.create((disposing) =>
DoRealDispose(disposing));
}
private void DoRealDispose(bool disposing) {
// dispose your unmanaged/fat stuff here
}
public void Dispose()
{
_disposer.Dispose();
}
}
No comments:
Post a Comment