华域联盟 .Net 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

详解ASP.NET Core 中基于工厂的中间件激活的实现方法

详解ASP.NET Core 中基于工厂的中间件激活的实现方法
 更新时间:2020年11月14日 13:59:45   作者:醉代码  

这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

IMiddlewareFactory/IMiddleware是中间件激活的扩展点。
UseMiddleware扩展方法检查中间件的已注册类型是否实现IMiddleware。如果是,则使用在容器中注册的IMiddlewareFactory实例来解析IMiddleware实现,而不使用基于约定的中间件激活逻辑。中间件在应用的服务容器中注册为作用域或瞬态服务。
优点:

按客户端请求(作用域服务的注入)激活
让中间件强类型化

IMiddleware按客户端请求(连接)激活,因此作用域服务可以注入到中间件的构造函数中。
IMiddleware
IMiddleware定义应用的请求管道的中间件。InvokeAsync(HttpContext, RequestDelegate)方法处理请求,并返回代表中间件执行的Task。
使用约定激活的中间件:

public class ConventionalMiddleware
{
private readonly RequestDelegate _next;

public ConventionalMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task InvokeAsync(HttpContext context, AppDbContext db)
{
var keyValue = context.Request.Query["key"];

if (!string.IsNullOrWhiteSpace(keyValue))
{
db.Add(new Request()
{
DT = DateTime.UtcNow,
MiddlewareActivation = "ConventionalMiddleware",
Value = keyValue
});

await db.SaveChangesAsync();
}

await _next(context);
}
}

使用MiddlewareFactory激活的中间件:

public class FactoryActivatedMiddleware : IMiddleware
{
private readonly AppDbContext _db;

public FactoryActivatedMiddleware(AppDbContext db)
{
_db = db;
}

public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
var keyValue = context.Request.Query["key"];

if (!string.IsNullOrWhiteSpace(keyValue))
{
_db.Add(new Request()
{
DT = DateTime.UtcNow,
MiddlewareActivation = "FactoryActivatedMiddleware",
Value = keyValue
});

await _db.SaveChangesAsync();
}

await next(context);
}
}

程序会为中间件创建扩展:

public static class MiddlewareExtensions
{
public static IApplicationBuilder UseConventionalMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<ConventionalMiddleware>();
}

public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<FactoryActivatedMiddleware>();
}
}

无法通过UseMiddleware将对象传递给工厂激活的中间件:

public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder, bool option)
{
// Passing 'option' as an argument throws a NotSupportedException at runtime.
return builder.UseMiddleware<FactoryActivatedMiddleware>(option);
}

将工厂激活的中间件添加到Startup.ConfigureServices的内置容器中:

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase("InMemoryDb"));

services.AddTransient<FactoryActivatedMiddleware>();

services.AddRazorPages();
}

两个中间件均在Startup.Configure的请求处理管道中注册:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}

app.UseConventionalMiddleware();
app.UseFactoryActivatedMiddleware();

app.UseStaticFiles();
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}

IMiddlewareFactory
IMiddlewareFactory提供中间件的创建方法。中间件工厂实现在容器中注册为作用域服务。
可在Microsoft.AspNetCore.Http包中找到默认的IMiddlewareFactory实现(即MiddlewareFactory)。
到此这篇关于ASP.NET Core 中基于工厂的中间件激活详解的文章就介绍到这了,更多相关ASP.NET Core中间件激活内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET Core 应用程序中的静态文件中间件的实现.Net Core中间件之静态文件(StaticFiles)示例详解.net core异常中间件的使用ASP.NET Core中间件初始化的实现在 asp.net core 的中间件中返回具体的页面的实现方法ASP.NET Core自定义中间件如何读取Request.Body与Response.Body的内容详解.net core webapi通过中间件获取请求和响应内容的方法利用.net core实现反向代理中间件的方法如何给asp.net core写个中间件记录接口耗时ASP.NET Core中间件计算Http请求时间示例详解ASP.NET Core应用错误处理之ExceptionHandlerMiddleware中间件呈现“定制化错误页面”.net core静态中间件的使用

ASP.NET
Core
激活

相关文章
asp.net5中用户认证与授权(2)ASP.NET5主要提供了两种应用程序,其一就是ASP.NET5控制台程序,另外一个是ASP.NET Web 应用程序。本文给大家介绍asp.net5中用户认证与授权(2),需要的童鞋可以参考下 2015-10-10
asp.NET中实现文件的压缩和解压(3种方式)本篇文章主要介绍了asp.NET中实现文件的压缩和解压,这里整理了详细的代码,有需要的小伙伴可以参考下。
2016-11-11
学习制作MVC4分页控件(上)这篇文章主要教大家学习制作MVC4分页控件,自己动手编写HtmlHelper-Pager分页控件,感兴趣的小伙伴们可以参考一下 2016-08-08
ASP.NET MVC页面重定向简单介绍这篇文章主要为大家详细介绍了ASP.NET MVC页面重定向的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-02-02
asp.net 虚方法、抽象方法、接口疑问asp.net 虚方法、抽象方法、接口疑问等说明。 2009-06-06
你应该知道的.NET错误与异常处理机制这篇文章主要给大家介绍了关于.NET错误与异常处理机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.NET具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2019-08-08
js插件类库组织与管理(基于asp.net管理)在开发一个较大规模的网站,js插件类库应用的是相当多。那么自然在一个页面里就存在不少script和script相关的link标记,这样js组织与管理自然成了一大问题。

2010-07-07
ASP.NET实现用图片进度条显示投票结果ASP.NET实现用图片进度条显示投票结果... 2007-06-06
.Net多线程编程(误用点分析)本文主要介绍了.Net多线程编程中的误用点分析。具有一定的参考价值,下面跟着小编一起来看下吧 2017-01-01
asp.net中Repeart选中整行操作实例这篇文章主要介绍了asp.net中Repeart选中整行操作的方法,实例分析了asp.net中Repeart的使用技巧,需要的朋友可以参考下 2015-01-01

最新评论

本文由 华域联盟 原创撰写:华域联盟 » 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

转载请保留出处和原文链接:https://www.cnhackhy.com/5023.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部