解析.netcore项目中IStartupFilter使用教程
背景:
netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些指定配置连接和端口,用起来非常方便。
干掉host,下面代码:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; namespace StartupFilterTest{internal class Program{static void Main(string[] args){#region Net 5Host.CreateDefaultBuilder(args).ConfigureServices((hostContext, svc) =>{svc.AddSingleton(); })//.ConfigureWebHostDefaults(host =>//{//host.UseStartup(); //}).Build().Run(); #endregion#region Net 6//var builder = WebApplication.CreateBuilder(); //builder.Services.AddSingleton (); //var app = builder.Build(); //app.Run(); //WebApplicationBuilder_bootstrapHostBuilderConfigureWebHostDefaults#endregion}}}
net5里面注释掉的代码就是我们关掉的服务,跑起来相当于纯控制台了。
但是startup里面需要写中间件等代码的指定,这样的话想把Startup文件干掉又不方便。通过找文档发现IStartupFilter可以实现这一块的功能,代替Configure代码块。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){}
IStartupFilter 接口只有一个方法《Action
internal class MyStartupFilter : IStartupFilter{public ActionConfigure(Action next){return app =>{app.Run(async context => { await context.Response.WriteAsync("hello world"); }); next(app); }; }}
svc.AddSingleton();
但是新的问题又来了, 发现程序跑起来完全不会执行到MyStartupFilter里面去,这是为什么呢?喵了下源码发现IStartupFilter接口的实现是放到webhost里面
的,所以只能指定Host了。而且该方法需要指定Startup文件。这样又绕回来了,想精简却被微软的设计绕圈子了。
文章图片
后面发现net6可以实现不需要startup文件,net6代码上图注释部分。net6的program改动挺大,而且起步是WebApplication。通过查看webapplication发现它的builder,webapplicationbuilder里面是通过bootstrapHostBuilder指定了ConfigureWebHostDefaults的调用。
【解析.netcore项目中IStartupFilter使用教程】
文章图片
net6可以精简掉Startup文件,但是它的启动直接绑定了webhost,这里跟net5比较连host都不能省了。
兜兜圈圈还是回到原点,因为没有研究它的源码,所以只能了解到这里了。最后两个问题: 1. net6可否不带host运行,2.IStartupFilter和Startup可否隔离host相互独立,不要绑一起。
到此这篇关于netcore项目中IStartupFilter使用的文章就介绍到这了,更多相关netcore IStartupFilter使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 赢在人生六项精进二阶Day3复盘
- 六项精进20180530
- 2020-12(完成事项)
- 17|17 关山松 第二课作业#公众号项目# D20
- RxJava|RxJava 在Android项目中的使用(一)
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听
- 靠QQ月入上万灰色暴利偏门的项目
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)