首页前端开发HTMLasp.net core 自定义中间件【以dapper为例】

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

时间2023-07-05 12:32:02发布访客分类HTML浏览807
导读:在asp.net core开发中。按照国际案例开始。都是先在Nuget安装XXX包。比如我们今天要用到的Dappernuget里面安装Dapper1.然后新建一个类文件DapperExtensions.cs因为Dapper是IDbConne...

在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 AddDapperT>
(this IServiceCollection service) where T:class,IDbConnection
        {
    
            service.AddScopedIDbConnection, 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.GetServiceIDbConnection>
    ();


            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, ActionDapperOption>
 option = null)
        {
    
            DapperOption opt = new DapperOption();

            if (option != null)
            {
    
                option(opt);

            }
    
            return builder.UseMiddlewareDapperMiddleWare>
    (opt);

        }

    }
    

使用:

app.UseDapper(opt =>

{
    
opt.connStr = Configuration[“db:mysqlmaster”];

}
    );
    

这两段代码非常简单。就是编写一个IApplicationBuilder的扩展方法,然后再扩展方法里面获取到注入的IDbconnection的接口,然后把委托方法传递进来的默认配置参数赋值进去,就可以了。

实际上,也可以在AddService的时候就可以把委托配置给赋值进去,很多第三方的库就是这么做的。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

开发框架中间件.NET

若转载请注明出处: asp.net core 自定义中间件【以dapper为例】
本文地址: https://pptw.com/jishu/290252.html
go-grpc的使用和学习 几十行代码实现ASP.NET Core自动依赖注入

游客 回复需填写必要信息