C# 使用Dapper 通过MS.DI 依赖注入的方式连接数据库

DAO层接口及实现类

 internal interface IUserDAO
    {
        public Task<User>? GetUserByName(string username);
    }
internal class UserDAO : IUserDAO
    {
        public readonly IDbConnection connection;

        /// <summary>
        /// 构造器注入连接驱动服务
        /// </summary>
        /// <param name="connection"></param>
        public UserDAO(IDbConnection connection)
        {
            this.connection = connection;
        }

        public async Task<User>? GetUserByName(string username)
        {
            var sql = "select * from T_User where UserName='" + username + "'";
            return (User)await connection.QueryFirstAsync<User>(sql);
        }
    }

BIZ层接口及实现类

internal interface IUserBIZ
    {

        public Task<bool> CheckLoginAsync(string username, string password);
    }
internal class UserBIZ : IUserBIZ
    {
        public readonly IUserDAO userDAO;
        public UserBIZ(IUserDAO userDAO) // 构造器注入DAO层
        {
            this.userDAO = userDAO;
        }

        public async Task<bool> CheckLoginAsync(string username, string password)
        {
            User user = await userDAO.GetUserByName(username);
            if (user == null) { return false; }
            return user.Password == password;
        }
    }

Entity层

 internal class User
    {
        public int Id { get; set; }

        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }

    }

控制台程序通过依赖注入调用

  		        /// <summary>
               ///  IOC 依赖注入是一个设计模式思想,而控制反转(DI)是依赖注入的实现方式 
             /// MS.DI中的依赖项作用域通常涉及三种主要的生命周期管理方式:
            /// 作用域(Scoped):与请求的生命周期相关联。
           /// 单例(Singleton):在整个应用程序的生命周期内只有一个实例。
          /// 瞬态(Transient):每次请求时都会创建一个新的实例。
         /// </summary>
        /// <param name="args"></param>
  static void Main(string[] args)
        {
ServiceCollection services = new ServiceCollection();

            services.AddScoped<TestServiceImpl>(); 
            services.AddScoped<IDbConnection>(sp =>
            {
                string connstr = "Server=.;Database=TestDB;User Id=sa;Password=sasa;";
                var conn = new SqlConnection(connstr);
                conn.Open();
                return conn;
            });
            services.AddScoped<IUserDAO, UserDAO>();
            services.AddScoped<IUserBIZ, UserBIZ>();
            using (ServiceProvider sp = services.BuildServiceProvider())
            {
                var service = sp.GetRequiredService<IUserBIZ>();
                var reulst = await service.CheckLoginAsync("User0", "Password5352");
                Console.WriteLine(reulst);
            }
        }

需要引用的包有install-package Dapper;
install-package Microsoft.Extensions.DependencyInjection;
这里只是简单的展示依赖注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值