asp.net core 自定义中间件【以dapper为例】
导读:在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核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: asp.net core 自定义中间件【以dapper为例】
本文地址: https://pptw.com/jishu/290252.html