webapi + dapper+mysql +autofac架构搭建

本文介绍了如何利用Dapper作为ORM工具,结合Autofac进行依赖注入,以及MySQL数据库,搭建一个简单的三层架构Web API框架。文章详细讲解了APIDapperTool、APIModel、Common、Repository以及IRepository层的设计,并讨论了框架的进一步优化可能性。
摘要由CSDN通过智能技术生成

写在前面: 

最近没啥事,研究了一下web api的框架, 选型用的是dapper+autofac+mysql, 简单的三层架构,总体框架如下,刚开始没有设计的太复杂:

分层介绍:

1.APIDapperTool介绍:

APIDapperTool里面是封装的dapper的一些dapper的操作,以及对多数据库的支持,dapper是一个轻量级的orm工具,与其说是一个orm,还不如称呼为dbhelper。它是一个对数据库操作的封装,不需要装什么其他的组件,只需要在nuget里面安装dapper,一个单文件就能实现操作,对其他数据库的支持也非常好,数据库间的切换也非常方便:

DbConnectionFactory这个里面是对dapper连接的的封装,以及多数据库的支持,切换,代码如下:

   public class DbConnectionFactory
    {
        /// 接收数据库类型,如:Oracle,MySQL,SqlServer。目前只支持者三种类型数据库的切换
        private static string _dbType = string.Empty;

        /// 数据库连接名
        private static string _connection = string.Empty;

        /// 获取连接名        
        private static string Connection
        {
            get { return _connection; }
            //set { _connection = value; }
        }

        /// 返回连接实例        
        private static IDbConnection dbConnection = null;
        #region 这种方式初始化属性值时,出现延迟的情况,导致静态方法被调用时,属性值为空,异常报错,因此弃用该方式,采用单例模式
        //{
        //    get
        //    {
        //        string dbConnection = ConfigurationManager.AppSettings["DbConnection"].ToString();
        //        if (!string.IsNullOrEmpty(dbConnection) && dbConnection.Contains('_'))
        //        {
        //            //获取:数据库类型_连接名:SqlServer_SqlConnection
        //            string[] strArray = dbConnection.Split('_');
        //            //接收:数据库类型
        //            _dbType = strArray[0].ToUpper();
        //            //接收:数据库连接名
        //            _connection = ConfigurationManager.ConnectionStrings[strArray[1]].ConnectionString;
        //        }
        //        return _connection;
        //    }
        //} 
        #endregion

        /// 静态变量保存类的实例        
        private static DbConnectionFactory uniqueInstance;

        /// 定义一个标识确保线程同步        
        private static readonly object locker = new object();

        /// <summary>
        /// 私有的构造方法,使外界不能创建该类的实例
        /// </summary>
        private DbConnectionFactory()
        {
            string dbConnection = ConfigurationManager.AppSettings["DbConnection"].ToString();
            if (!string.IsNullOrEmpty(dbConnection) && dbConnection.Contains('_'))
            {
                //获取:数据库类型_连接名:SqlServer_SqlConnection
                string[] strArray = dbConnection.Split('_');
                //接收:数据库类型
                _dbType = strArray[0].ToUpper();
                //接收:数据库连接名
                _connection = ConfigurationManager.ConnectionStrings[strArray[1]].ConnectionString;
            }
        }

        /// <summary>
        /// 全局访问点
        /// </summary>
        /// <returns>返回单一实例</returns>
        public static DbConnectionFactory GetInstance()
        {
            // 当第一个线程运行到这里时,此时会对locker对象 "加锁",
            // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁
            // lock语句运行完之后(即线程运行完之后)会对该对象"解锁"
            // 双重锁定只需要一句判断就可以了
            if (uniqueInstance == null)
            {
                lock (locker)
                {
                    // 如果类的实例不存在则创建,否则直接返回
                    if (uniqueInstance == null)
                    {
                        uniqueInstance = new DbConnectionFactory();
                    }
                }
            }
            return uniqueInstance;
        }

        /// <summary>
        ///  根据 Appsetting配置中的数据库类型和连接名,打开当前配置的数据库连接。
        /// </summary>
        /// <returns></returns>
        public static IDbConnection OpenCurrentDbConnection()
        {
           
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值