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

 更新时间:2021年11月23日 11:41:20   作者:星仔007  
netcore项目中有些服务是在通过中间件来通信的,比如orleans组件,今天通过实例代码给大家介绍下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<IStartupFilter, MyStartupFilter>();
               })
                //.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<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
        {
            return app =>
            {
                app.Run(async context => { await context.Response.WriteAsync("hello world"); });
                next(app);
            };
        }
    }
svc.AddSingleton<IStartupFilter, MyStartupFilter>();

但是新的问题又来了, 发现程序跑起来完全不会执行到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 数据保护(Data Protection)中篇

    ASP.NET Core 数据保护(Data Protection)中篇

    这篇文章主要为大家再一次介绍了ASP.NET Core 数据保护(Data Protection),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • .NET Core2.1如何获取自定义配置文件信息详解

    .NET Core2.1如何获取自定义配置文件信息详解

    这篇文章主要给大家介绍了关于.NET Core2.1如何获取自定义配置文件信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 详解在ASP.NET Core中如何编写合格的中间件

    详解在ASP.NET Core中如何编写合格的中间件

    这篇文章主要介绍了详解在ASP.NET Core中如何编写合格的中间件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解.NET中使用Redis数据库

    详解.NET中使用Redis数据库

    Redis是一个用的比较广泛的Key/Value的内存数据库,这篇文章主要介绍了详解.NET中使用Redis数据库,有兴趣的可以了解一下。
    2016-12-12
  • ASP.NET中的几种弹出框提示基本实现方法

    ASP.NET中的几种弹出框提示基本实现方法

    NET程序的开发过程中,常常需要和用户进行信息交互,对话框的出现将解决了这些问题,下面是本人对常用对话框使用的小结,希望对大家有所帮助
    2013-03-03
  • 运用.net core中实例讲解RabbitMQ

    运用.net core中实例讲解RabbitMQ

    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),本文详细讲解了RabbitMQ以及运用.net core中实例讲解其6中模式,感兴趣的小伙伴一起来学习吧
    2021-09-09
  • ASP.NET Core实现单体程序的事件发布/订阅详解

    ASP.NET Core实现单体程序的事件发布/订阅详解

    这篇文章主要给大家介绍了关于ASP.NET Core实现单体程序的事件发布/订阅的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • c#后台修改前台DOM的css属性示例代码

    c#后台修改前台DOM的css属性示例代码

    本文为大家详细介绍下如何使用c#修改前台DOM的css属性,具体示例如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • asp.net 编辑gridview的小例子

    asp.net 编辑gridview的小例子

    gridview的编辑方法的小例子,一段代码,供大家学习参考
    2013-04-04
  • ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录

    ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录

    本文主要介绍了QQ、微信、新浪微博OAuth2.0授权登录的示例,主要就是GET、POST远程接口,返回相应的数据,这里列出相关的代码,供大家参考。
    2016-03-03

最新评论