在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的時候就可以把委託配置給賦值進去,很多第三方的庫就是這麼做的。