asp.net core 自定義中間件【以dapper爲例】

原文: asp.net core 自定義中間件【以dapper爲例】

在asp.net core開發中。按照國際案例開始。都是先在Nuget安裝XXX包。好比咱們今天要用到的Dapperhtml

nuget裏面安裝Dappermysql

1.而後新建一個類文件DapperExtensions.cssql

由於Dapper是IDbConnection擴展出來的,因此咱們必須給IDbConnection一個默認的實現app

/// <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裏面加入asp.net

services.AddDapper();async

理論上到這裏,就已經能夠勉強使用了。可是本文是記錄中間件的學習,因此咱們仍是得在後面學習一下中間件的寫法post

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); } }

使用:ui

app.UseDapper(opt => { opt.connStr = Configuration[「db:mysqlmaster」]; });

 

這兩段代碼很是簡單。就是編寫一個IApplicationBuilder的擴展方法,而後再擴展方法裏面獲取到注入的IDbconnection的接口,而後把委託方法傳遞進來的默認配置參數賦值進去,就能夠了。this

實際上,也能夠在AddService的時候就能夠把委託配置給賦值進去,不少第三方的庫就是這麼作的。

相關文章
相關標籤/搜索