asp.net core 自定义中间件【以dapper为例】
2019-05-16 23:13
1661 查看
在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的时候就可以把委托配置给赋值进去,很多第三方的库就是这么做的。
相关文章推荐
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- [Asp.net core]自定义中间件
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- 自定义ASP.NET Core日志中间件
- asp.net core 自定义中间件和service
- Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)
- asp.net core 系列之中间件进阶篇-编写自定义中间件(middleware)
- 学习ASP.NET Core,你必须知道“中间件”是什么?中间件如何注册?请求处理管道是如何通过中间件构建的?
- Asp.Net Core 通过中间件防止图片盗链
- asp.net core 2.0中如何自定义 actionfilter
- [译]ASP.NET Core 2.0 带初始参数的中间件
- ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面
- ASP.NET Core 在 Swagger UI 中显示自定义的 Header Token
- ASP.NET Core中使用GraphQL - 第二章 中间件
- 将参数传递给ASP.NET Core 2.0中的中间件
- asp.net core StaticFiles中间件修改wwwroot
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
- asp.net core 自定义认证方式--请求头认证