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;
这里只是简单的展示依赖注入。