首页 > 编程语言 >ASP.NET Core — IStartupFilter 与 IHostingStartup

ASP.NET Core — IStartupFilter 与 IHostingStartup

时间:2023-02-08 23:11:16浏览次数:45  
标签:Core ASP IStartupFilter Configure app IHostingStartup Startup NET public

1. IStartupFilter

  上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能点将将一系列相关中间件的注册封装到一起,从 Startup 类中分离,单独进行维护,以便更清晰地管理我们的代码。

  这时候我们可以实现 IStartupFilter 接口,然后将其注入到容器之中,在应用启动的时候 IStartupFilter 实现类会被执行,从而完成对中间件的配置。

  在 IStartupFilter 中配置的中间件,总是比 Startup 类中 Configure 方法中的中间件先注册;对于多个 IStartupFilter 实现,执行顺序与服务注册时的顺序相反

  通过源码可以看到,ASP.NET Core 框架在创建应用的时候,会从容器中提取出所有的 IStartupFilter 的实现类,循环执行,然后再执行 Startup 类中的 Configure 方法。

image

下面是一个测试例子 :

点击查看代码
public class FirstStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        Console.WriteLine("FirstStartupFilter");
        return app => next(app);
    }
}

public class SecondStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        Console.WriteLine("SecondStartupFilter");
        return app => next(app);
    }
}

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        Console.WriteLine("Startup: ConfigureServices");
        services.AddTransient<IStartupFilter, FirstStartupFilter>();
        services.AddTransient<IStartupFilter, SecondStartupFilter>();
        services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        Console.WriteLine("Startup.Configure");
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseRouting
        app.UseAuthorization
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

执行结果如下:
image

2 IHostingStartup

  第一次接触 IHostingStartup 的应用是在 Skywalking 的使用之中,当初觉得 Skywalking 仅仅通过配置一个环境变量就能集成相关的功能非常神奇,并不知道具体是怎么实现的。后面出于这点好奇心,了解了一下相关的原理,才知道原来是使用了 IHostingStartup 在启动时通过外部程序集向应用增加更多功能。

标签:Core,ASP,IStartupFilter,Configure,app,IHostingStartup,Startup,NET,public
From: https://www.cnblogs.com/wewant/p/17103669.html

相关文章

  • ASP.NET Core—入口文件
    1.入口文件  一个应用程序总有一个入口文件,是应用启动代码开始执行的地方,这里往往也会涉及到应用的各种配置。当我们接触到一个新框架的时候,可以从入口文件入手,了解入......
  • ASP.NET Core 系列总结
    《ASP.NETCore系列总结》《ASP.NETCore》系列文章基于.NET3.1和.NET6,主要是系统总结自己日常工作和学习中的知识点,也供大家参考,希望大家都能够对ASP.NETCore......
  • 【.NET 8】ASP.NET Core计划 - 支持更完善的AOT发布
    .NET7.0刚发布不久,.NET社区开始了.NET8.0的开发,重心重新回到了新功能的迭代。我们知道在.NET7.0中一个令人激动的特新就是支持了NativeAOT,我们可以通过NativeAOT生成本机......
  • Windows离线安装.net Framework3.5
    写在前面本文主要介绍在Windows离线情况下安装.NETFramework3.5运行环境使用场景在日常开发C#程序中,经常会遇到开发过程中无任何问题,但是安装到目标电脑是会无法打开......
  • API对象--Ingress(chrono《kubernetes入门实战课》笔记整理)
    【概念说明】Service的功能和运行机制,主要由kube-proxy控制的四层负载均衡,即根据IP、PORT来做负载均衡。而很多应用都是在7层做均衡更为合理,比如根据主机名、URI、请求......
  • 开发高性能ASP.NET应用
    本文是“.NETConfChina2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:制定指示设计应用正确测试性能优化高性能:不一定是架构出来的......
  • 开发高性能ASP.NET应用
    本文是“.NETConfChina2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:制定指示设计应用正确测试性能优化高性能:不一定是架构出来的......
  • 论文阅读:FADNet(2022-AAAI)
    题目:GenerativeAdaptiveConvolutionsforReal-WorldNoisyImageDenoising(AAAI-2022)paper:https://ojs.aaai.org/index.php/AAAI/article/view/20088/19847动机:很......
  • dnSpy 强大的dotnet 调试以及反编译编辑器
    dnSpy强大的dotnet调试以及反编译编辑器支持的功能调试.net以及unity应用编辑.net以及unity应用轻量级以及暗黑模式反编译支持的能力所有的元数据都可以编......
  • 什么是Azure Network Watcher
    现如今,越来越多的企业开始在云中部署他们的数据资产。一般情况下,当企业在云中部署某个应用时,基本上都是首先构建一个虚拟网络,然后进行一些基本的安全和连接设置。然后使其通......