zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
    
  • 相关阅读:
    js获取url参数
    Ueditor百度编辑器中的 setContent()方法的使用
    js防止sql注入的参数过滤
    父级元素点击,遮盖了子元素的点击
    input onchange事件
    jq选择子元素
    nodejs mysql 执行多条sql语句
    java.util.ConcurrentModificationException
    Group by与having理解
    ibatis配置xml文件中CDATA的用法
  • 原文地址:https://www.cnblogs.com/known/p/1326285.html
Copyright © 2011-2022 走看看