asp.Netcoreカスタムミドルウェア【dapperを例に】
5206 ワード
asp.Netcore開発中です.国際的なケースに基づいて開始します.いずれも、まずNugetにXXXパッケージをインストールします.例えば私たちが今日使うDapper
nugetにDapperをインストールする
1.クラスファイルを新規作成します.cs
DapperはIDbConnectionで拡張されているので、IDbConnectionのデフォルトの実装を行う必要があります.
次の操作を行います.
この2つのコードは非常に簡単です.IApplicationBuilderの拡張メソッドを作成し、拡張メソッドで注入されたIDbconnectionのインタフェースを取得し、依頼メソッドから渡されたデフォルトの構成パラメータを付与すればよい.
実際には、AddServiceのときに委任構成を付与することもでき、多くのサードパーティのライブラリがそうしています.
nugetにDapperをインストールする
1.クラスファイルを新規作成します.cs
DapperはIDbConnectionで拡張されているので、IDbConnectionのデフォルトの実装を行う必要があります.
///
/// /// ///
/// /// public static IServiceCollection AddDapper (this IServiceCollection service) where T:class,IDbConnection { service.AddScoped (); 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();
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 option = null)
{
DapperOption opt = new DapperOption();
if (option != null)
{
option(opt);
}
return builder.UseMiddleware(opt);
}
}
次の操作を行います.
app.UseDapper(opt =>
{
opt.connStr = Configuration[“db:mysqlmaster”];
});
この2つのコードは非常に簡単です.IApplicationBuilderの拡張メソッドを作成し、拡張メソッドで注入されたIDbconnectionのインタフェースを取得し、依頼メソッドから渡されたデフォルトの構成パラメータを付与すればよい.
実際には、AddServiceのときに委任構成を付与することもでき、多くのサードパーティのライブラリがそうしています.