asp.net core 自定义中间件【以dapper为例】

本文涉及的产品
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
简介: 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的时候就可以把委托配置给赋值进去,很多第三方的库就是这么做的。

目录
相关文章
|
29天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
47 5
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
50 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
31 3
|
14天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
31 0
|
8月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
123 0
|
7月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1932 0
|
6月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
288 3
|
3月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
143 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
5月前
|
消息中间件 Java 测试技术
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
|
5月前
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】

相关课程

更多