我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

解析.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使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue3项目中的hooks的使用教程

今天我们稍微说一下vue3项目中的hooks的使用,其实这个hooks呢是和vue2当中的mixin是类似的,学习过vue2的小伙伴一定对mixin一定比较熟悉,快跟随小编一起来学习学习吧
2022-11-13

SpringBoot项目中使用Swagger2及注解解释的详细教程

Swagger2是一个开源项目,用于为RESTfulWeb服务生成RESTAPI文档,下面这篇文章主要给大家介绍了关于SpringBoot项目中使用Swagger2及注解解释的详细教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-14

Vue项目中引入ECharts的教程详解

ECharts是一个强大的画图插件,在vue项目中,我们常常可以引用Echarts来完成完成一些图表的绘制,本文就来和大家介绍一下如何在Vue项目中引入ECharts吧
2023-03-15

Node.js使用Express创建Web项目详细教程

序:如果你还不知道Node.js是什么,那么你可以先看看这篇:Node.js 究竟是什么?或者任何关于它的介绍。 一、安装Node.js 1.进入Node.js官网下载并安装2.启动cmd输入命令查看node及npm版本node -vnpm
2022-06-04

centos8使用Docker部署Django项目的详细教程

引言 在本文中将介绍在docker中通过django + uwsgi + nginx部署方式部署Django项目, 由于记录的是学习过程,使用的都是目前较高的版本。python 版本为3.8.3 django 版本为3.0.6 ngin
2022-06-04

项目中怎样使用git流程

随着大型项目的不断增多,越来越多的开发者关注项目如何管理他们的代码。版本控制系统Git已逐渐成为最受欢迎的工具之一。Git通常可用于协作开发和版本控制,使多个开发团队能够同时在同一项目上工作。本文将介绍如何使用Git流程来组织和管理软件开发
2023-10-22

vue项目中使用mapbox地图切换底图的详细教程

最近开始入坑前端mapbox地图,跟大家一起慢慢深入学习,下面这篇文章主要给大家介绍了关于vue项目中使用mapbox地图切换底图的详细教程,文中给出了详细的实例代码,需要的朋友可以参考下
2023-05-18

使用Maven搭建SpringMVC项目的步骤(图文教程)

约定电脑都安装了eclipse,且已配置好Maven以及eclipse插件。  1.Eclipse  2.maven  3.Eclipse 需要安装maven插件。url:maven - http://download.eclipse.or
2023-05-31

使用WebStorm运行vue项目的详细图文教程

在WebStorm中怎么打开一个已有的项目,这个不用多说,那么如何运行一个vue项目呢?下面这篇文章主要给大家介绍了关于使用WebStorm运行vue项目的相关资料,需要的朋友可以参考下
2023-02-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录