解析.netcore项目中IStartupFilter使用教程

2022-04-15 20:58:37

背景:

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((hoyStartupFilter>();               })                //.ConfigureWebHostDefaults(host =>                //{                //    host.UseStartup<Startup>();                //})                .Build().Run();             #endregion            #region Net 6            //var builder = WebApplication.CreateBuilder();            //builder.Services.AddSingleton<IStartupFilter,MyStartupFilter>();            //var app = builder.Build();            //app.Run();             //WebApplicationBuilder     _bootstrapHostBuilder    ConfigureWebHostDefaults            #endregion        }    }}

net5里面注释掉的代码就是我们关掉的服务,跑起来相当于纯控制台了。

但是startup里面需要写中间件等代码的指定,这样的话想把Startup文件干掉又不方便。通过找文档发现IStartupFilter可以实现这一块的功能,代替Configure代码块。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)        {                   }

IStartupFilter 接口只有一个方法《Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)》只要实现它就行了,再注入到容器里面去。

internal class MyStartupFilter : IStartupFilter    {        public Action<IApplic