您现在的位置是:网站首页> 编程资料编程资料
解析.netcore项目中IStartupFilter使用教程_实用技巧_
2023-05-24
392人已围观
简介 解析.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 5 Host.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 _bootstrapHostBuilder ConfigureWebHostDefaults #endregion } } } net5里面注释掉的代码就是我们关掉的服务,跑起来相当于纯控制台了。
但是startup里面需要写中间件等代码的指定,这样的话想把Startup文件干掉又不方便。通过找文档发现IStartupFilter可以实现这一块的功能,代替Configure代码块。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { }IStartupFilter 接口只有一个方法《Action
internal class MyStartupFilter : IStartupFilter { public Action Configure(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的调用。

net6可以精简掉Startup文件,但是它的启动直接绑定了webhost,这里跟net5比较连host都不能省了。
兜兜圈圈还是回到原点,因为没有研究它的源码,所以只能了解到这里了。最后两个问题: 1. net6可否不带host运行,2.IStartupFilter和Startup可否隔离host相互独立,不要绑一起。
到此这篇关于netcore项目中IStartupFilter使用的文章就介绍到这了,更多相关netcore IStartupFilter使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- 三种方法解决ASP.NET Core 6中的依赖项_基础应用_
- python安装pillow的三种方法_实用技巧_
- 在.NET 6中使用日志组件log4net的方法_实用技巧_
- .NET6新特性之 隐式命名空间引用_ASP.NET_
- .NET多种数据库大数据批量插入、更新(支持SqlServer、MySql、PgSql和Oracle)_自学过程_
- .NET Core 中对象池 Object Pool的使用_ASP.NET_
- .NET6新特新 struct优化_ASP.NET_
- .NET垃圾回收GC诊断工具dotnet-gcmon使用_实用技巧_
- ASP.NET Core设置URLs的五种方法_实用技巧_
- 教你30分钟通过Kong实现.NET网关_实用技巧_
