asp.net core 自定义中间件【以dapper为例】
在asp.net core开发中。按照国际案例开始。都是先在Nuget安装XXX包。比如我们今天要用到的Dapper
nuget里面安装Dapper
1.然后新建一个类文件DapperExtensions.cs
因为Dapper是IDbConnection扩展出来的,所以我们必须给IDbConnection一个默认的实现
/// <summary>
/// 注入服务
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="service"></param>
/// <returns></returns>
public static IServiceCollection AddDapper<T>(this IServiceCollection service) where T:class,IDbConnection
{
service.AddScoped<IDbConnection, T>();
return service;
}
如何使用呢?在Startup里面加入
services.AddDapper();
理论上到这里,就已经可以勉强使用了。但是本文是记录中间件的学习,所以我们还是得在后面学习一下中间件的写法
2.新建一个DapperMiddleWareExtensions.cs和DapperMiddleWare.cs文件
public class DapperMiddleWare
{
private readonly RequestDelegate _next;
private DapperOption _option;
public DapperMiddleWare(RequestDelegate next, DapperOption option)
{
_next = next;
this._option = option;
}
public async Task InvokeAsync(HttpContext context)
{
var conn = context.RequestServices.GetService<IDbConnection>();
if (_option != default(DapperOption))
{
if (!_option.connStr.IsNull())
{
conn.ConnectionString = _option.connStr;
}
}
// Call the next delegate/middleware in the pipeline
await _next(context);
}
}
public static class DapperMiddleWareExtensions
{
public static IApplicationBuilder UseDapper(this IApplicationBuilder builder, Action<DapperOption> option = null)
{
DapperOption opt = new DapperOption();
if (option != null)
{
option(opt);
}
return builder.UseMiddleware<DapperMiddleWare>(opt);
}
}
使用:
app.UseDapper(opt =>
{
opt.connStr = Configuration[“db:mysqlmaster”];
});
这两段代码非常简单。就是编写一个IApplicationBuilder的扩展方法,然后再扩展方法里面获取到注入的IDbconnection的接口,然后把委托方法传递进来的默认配置参数赋值进去,就可以了。
实际上,也可以在AddService的时候就可以把委托配置给赋值进去,很多第三方的库就是这么做的。
分类:
.Net Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端