IDisposable模式

IDisposable模式不是经典的GOF模式之一,主要是实现IDisposable接口,这在.Net Framework中很常见,当用using语句时,实现这个接口的类在释放资源时自动释放。例如我们在开发中经常用到事务控制,这时我们写一个事务控制类,让它继承IDisposable接口。

public class TransactionControl : IDispoable
{
    private bool _disposed = false;
    private IDbConnection _conn;
    private IDbTransaction _trans;

    public TransactionControl()
    {
        try
        {
            _conn = ConnFactory.Create(ConnManager.GetConnInfo());
            _conn.Open();
            _trans = _conn.BeginTransaction();
        }
        catch
        {
            Dispose();
        }
    }

    public TransactionControl(string name)
    {
        try
        {
            _conn = ConnFactory.Create(ConnManager.GetConnInfoByName(name));
            _conn.Open();
            _trans = _conn.BeginTransaction();
        }
        catch
        {
            Dispose();
        }
    }

    public void Commit()
    {
        _trans.Commit();
    }

    public void Rollback()
    {
        _trans.Rollback();
    }

    public IDbConnection Connection
    {
        get { return _conn; }
    }

    public IDbTransaction Transaction
    {
        get { return _trans; }
    }

    ~DisposeObject()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
    }

    private void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                CleanUp();
                GC.SuppressFinalize(this);
            }
            _disposed = true;
        }
    }

    private void CleanUp()
    {
        if (_trans != null)
        {
            _trans.Dispose();
        }
        if (_conn != null)
        {
            if (_conn.State != ConnectionState.Closed)
            {
                _conn.Close();
            }
            _conn.Dispose();
        }
    }
}
posted @ 2008-11-04 14:06  known  阅读(532)  评论(0编辑  收藏  举报