浪浪山管理系统开发---依赖注入
我们要举得例子呢是一个分页查询的API
话不多说,我们先看效果图:
看完效果图了,那么大概我们要实现一个什么功能,大家就心里有数了吧?那话不多说,我们进入Code TIme
在Program.cs中注册服务
首先我们进入Program.cs文件,这个文件你可以理解成是项目的入口点,在C语言中我们的程序都是从main函数开始的,同理在C#中main函数就隐藏在这个文件里面。也就是说我们点击运行程序的时候他首先会从Program.cs文件中进入。
既然知道我们的Program.cs是干啥的之后我们先来看看代码吧!!
using langlangshanWebAPI.Utility.SwaggerExt;
using Microsoft.OpenApi.Models;
using SqlSugar;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
#region IOC
builder.Services.AddTransient<SqlSugarClient>(serverprivider =>
{
ConnectionConfig connection = new ConnectionConfig()
{
ConnectionString = builder.Configuration.GetConnectionString("Default"),
DbType = DbType.SqlServer,//提交数据库的类型
IsAutoCloseConnection = true,//自动关闭连接
InitKeyType = InitKeyType.Attribute,//从特性读取主键自增列信息
};
return new SqlSugarClient(connection);
}
);
#endregion
上面的代码就是我们的核心代码部分,当前我们的例子是实现我们分页管理api的,所以我删减了部分Program.cs文件中的内容,保留了最核心的代码,下面我将逐步解析一下整个过程。
我们得从builder开始讲起,否则整个代码将不太好理解,我们先来介绍一下builder吧
-
builder是ASP.NET Core 6.0+中的一个新概念,它是WebApplicationBuilder类的一个实例。WebApplicationBuilder简化了应用程序的启动和配置过程。
-
WebApplicationBuilder包含以下几个关键部分:
- Configuration:用于读取应用程序的配置文件(如appsettings.json)和环境变量。
- Logging:用于配置应用程序的日志记录。
- Services:用于注册依赖注入容器中的服务。
- Host:用于配置应用程序的主机。
- WebApplicationBuilder的工作原理
- 创建构建器:WebApplication.CreateBuilder(args)方法创建一个WebApplicationBuilder实例。这个实例包含了默认的配置、日志记录和服务注册。
- 配置服务:通过builder.Services,您可以将各种服务注册到依赖注入容器中。这些服务可以在应用程序的各个部分使用。
- 配置中间件:通过builder,您可以配置中间件管道。中间件是处理HTTP请求和响应的组件,它们按顺序执行。
- 构建应用程序:调用builder.Build()方法构建一个WebApplication实例。这个实例代表整个应用程序,并包含所有已注册的服务和中间件配置。
简单理解就是builder就代表了整个应用,其内部有configuration方法来配置项目所需文件,也有Services方法来进行依赖注入。明白这点之后一切都会变的好理解起来。
那回到我们的代码,知道了builder是什么你就应该就能明白我们代码部分在干啥了吧,看到那个Services方法没,没错!!他就是在注册依赖注入容器中的服务。
builder.Services.AddTransient<SqlSugarClient>(serverprivider =>
{
ConnectionConfig connection = new ConnectionConfig()
{
ConnectionString = builder.Configuration.GetConnectionString("Default"),
DbType = DbType.SqlServer,//提交数据库的类型
IsAutoCloseConnection = true,//自动关闭连接
InitKeyType = InitKeyType.Attribute,//从特性读取主键自增列信息
};
return new SqlSugarClient(connection);
}
);
而其中的
ConnectionConfig connection = new ConnectionConfig()
代码则是在连接我们的数据库,设置我们的数据库类型
ConnectionConfig connection = new ConnectionConfig()
{
ConnectionString = builder.Configuration.GetConnectionString("Default"),
DbType = DbType.SqlServer,//提交数据库的类型
IsAutoCloseConnection = true,//自动关闭连接
InitKeyType = InitKeyType.Attribute,//从特性读取主键自增列信息
};
按照往常的经验,连接数据库我们是需要数据库的信息的,比如数据库的用户名和密码等等信息,这个部分去哪了呢???在以上代码中这部分被我们设置在了
appsettings.json
文件中,那appsettings.json
是什么呢??这个文件也是和Program.cs一样,也是.NET自带的文件,以下是它的介绍:
- appsettings.json是ASP.NET Core项目中的一个配置文件,用于存储应用程序的配置信息。它通常包含数据库连接字符串、应用程序设置、日志配置等。这个文件使用JSON格式,易于阅读和编辑。
是的,整个字符串连接信息全部存入了变量
Default
中,我们在Program.cs中调用它就好了,这就是我们上面代码的ConnectionString
的调用部分:
ConnectionString = builder.Configuration.GetConnectionString("Default"),
到这里我们的服务注册部分就完成了,注册完成了,那我们总得调用它吧?接下来我们将来调用它。
让我们来到
SystemLogController.cs
,在此之前我们也要介绍一下Controller(控制器)。
在Controller类中实现调用
- Controller(控制器)的作用
- 处理请求:控制器接收并处理来自客户端的HTTP请求。
- 调用业务逻辑:控制器通常会调用服务层或业务逻辑层来处理请求。
- 返回响应:控制器将处理结果封装成HTTP响应返回给客户端。
千言万语,浓缩成一句话,控制器就是在接受或者发送Http请求,比如用户在网页要查询某一页的内容,那我程序是不是要调用数据库???那好,既然要调用数据我们就得发送get请求,去从数据库里面把要的数据传到用户页面。那我们的控制器就是这样作用,他就是替我们把查询请求发送给数据库命令的嘴替!!
明白了控制器的作用,我们对代码的理解就会好很多,接下来我们来分析一下代码:
using langlangshan.SmartFactory.Enitity.EnitityMap;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace langlangshanWebAPI.Controllers
{
/// <summary>
/// 系统日志管理
/// </summary>
[ApiController]
[Route("[controller]")]
public class SystemLogController : ControllerBase
{
private readonly ILogger<SystemLogController> _logger;
private readonly SqlSugarClient _SqlSugarClient;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="logger"></param>
public SystemLogController(ILogger<SystemLogController> logger,SqlSugarClient sqlSugarClient)
{
_logger = logger;
_SqlSugarClient = sqlSugarClient;
}
/// <summary>
/// 分页查询
/// </summary>
/// <param name="pageindex">当前第几页</param>
/// <param name="pageSize">每一页的数量</param>
/// <returns></returns>
///
[HttpGet("{pageindex:int}/{pageSize:int}")]
public IActionResult SystemLogPage(int pageindex,int pageSize)
{
int totalcount = 0;
// SqlSugarClient sqlSugarClient = new SqlSugarClient(connection);
List <SystemLog> pagerList=_SqlSugarClient.Queryable <SystemLog>().ToPageList(pageindex, pageSize,
ref totalcount );
return new JsonResult(new
{
Data= pagerList,
TotalCount = totalcount
});
}
}
}
以上呢就是我们
SystemLogController.cs
里面的完整代码。我们来讲一下这部分代码的作用。首先映入我们眼前的是我们控制器的构造函数:
public SystemLogController(ILogger<SystemLogController> logger,SqlSugarClient sqlSugarClient)
{
_logger = logger;
_SqlSugarClient = sqlSugarClient;
}
(ps:不知道构造函数的自己去Google一下,这个太基础了,就不讲了)。这个构造函数定义了我们需要的参数,一个是我们的
SqlSugerClient
参数。然后我们把这个参数传递给我们在当前SystemLogController.cs
定义的变量_SqlSugarClient
。这个是一个什么过程呢?这个过程是这样的,当你启动项目的时候,程序在Program.cs中注册了相应的服务,然后此时我们调用SystemLogController.cs
中的方法的时候首先就会去查看构造函数,程序发现构造函数需要SqlSugerClient,那就直接把我们在Program.cs的注册的SqlSugerClient实例传给了控制器类中的_SqlSugarClient,此时Program.cs创建的实例就传递到了我们控制器类中来了,以便我们可以完成后续的操作。我们后续的操作就是查询嘛,于是我们下面这段代码就在实现查询,然后返回查询到的数据。
[HttpGet("{pageindex:int}/{pageSize:int}")]
public IActionResult SystemLogPage(int pageindex,int pageSize)
{
int totalcount = 0;
// SqlSugarClient sqlSugarClient = new SqlSugarClient(connection);
List <SystemLog> pagerList=_SqlSugarClient.Queryable <SystemLog>().ToPageList(pageindex, pageSize, //将查询到的数据保存为列表形式
ref totalcount ); //
return new JsonResult(new
{
Data= pagerList,
TotalCount = totalcount
});
}
这里的返回结果是这样的:
以上就是我们进行依赖注入的全过程了,是不是很有意思呢??
停留在世界边缘,与之惜别