当前位置: 首页 > news >正文

做网站广告多少钱跨国浏览器

做网站广告多少钱,跨国浏览器,共享会议室租赁平台,新闻软文发稿平台ASP.NET Core - IStartupFilter 与 IHostingStartup 1. IStartupFilter2 IHostingStartup2.5.1 创建外部程序集2.5.2 激活外部程序集 1. IStartupFilter 上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能…

ASP.NET Core - IStartupFilter 与 IHostingStartup

  • 1. IStartupFilter
  • 2 IHostingStartup
      • 2.5.1 创建外部程序集
      • 2.5.2 激活外部程序集

1. IStartupFilter

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

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

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

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

在这里插入图片描述
下面是一个测试例子 :

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.UseRoutingapp.UseAuthorizationapp.UseEndpoints(endpoints =>{endpoints.MapControllers();});}
}

执行结果如下:
在这里插入图片描述

2 IHostingStartup

  第一次接触 IHostingStartup 的应用是在 Skywalking 的使用之中,当初觉得 Skywalking 仅仅通过配置一个环境变量就能集成相关的功能非常神奇,并不知道具体是怎么实现的。后面出于这点好奇心,了解了一下相关的原理,才知道原来是使用了 IHostingStartup 在启动时通过外部程序集向应用增加更多功能,它是 ASP.NETCore 框架原生提供的一种进行模块化开发的方式,使用它必须通过 Web 主机调用 ConfigureWebHost、ConfigureWebHostDefaults 配置方法。

通过源码可以看到,在调用 Build 方法构建主机的时候会获取外部程序集名称,然后将其加载,再通过HostingStartupAttribute 程序集特性找到配置的 HostingStartType,该类需要实现 IHostingStartup 接口,之后反射生成实例,调用其中的 Configure 方法,传入 IWebHostBuider 对象,因此在 IHostingStartup 实现类中一样可以进行依赖注入、管道配置。

在这里插入图片描述
在这里插入图片描述
再看怎么获取外部程序集名称的:

在这里插入图片描述
在这里插入图片描述
可以看到是从配置系统中获取的,而 key 是 WebHostDefaults.HostingStartupAssembliesKey 常量,也就是 hostingStartupAssemblies,由于这里是 主机配置,所以我们可以通过 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 进行设置,Web 主机在加载环境变量的时候会截去前缀 ASPNETCORE_ ,配置系统中 key 不区分大小写。

在这里插入图片描述
下面看看如何使用 IHostingStartup:

2.5.1 创建外部程序集

首先我们创建 HostingStartup 程序集,可以通过创建类库项目或无入口点的控制台应用来实现。

在这里插入图片描述
之后创建一个 IHostingStartup 接口的实现类

[assembly: HostingStartup(typeof(MyHostingStartup))]
namespace HostingStartupLib
{public class MyHostingStartup : IHostingStartup{public void Configure(IWebHostBuilder builder){builder.ConfigureServices(services => { }).ConfigureAppConfiguration(app => { });Console.WriteLine("Init External Amsebly!");}}
}

该类的 Configure 方法中入参为 IWebHostBuilder ,通过 IWebHostBuilder 来添加增强功能,像 Program.cs 文件中对主机进行配置一样。

之后,需要配置 HostingStartup 特性,这是一个程序集特性,指定当前程序集的 IHostingStartup 实现类类型。

2.5.2 激活外部程序集

有了一个这样的 HostingStartup 外部程序集之后,我们在主体应用项目中可以这样进行激活。

首先,将该程序集应用进项目之中:

在这里插入图片描述
然后,向配置系统中设置外部程序集的名称,以实现在构建主机的时候进行加载,由于是主机配置,所以我们可以通过几种方式进行设置:

(1) 在构建主机的时候进行配置

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey,"HostingStartupLib").UseStartup<Startup>();});

其实这里的 UseSetting 方法就是就是往配置系统中添加配置而已

在这里插入图片描述
(2) 通过环境变量进行设置

Web主机在启动的时候会通过环境变量提供程序获取环境变量作为主机配置,并且会在写入配置系统的时候会截取掉 ASPNET_ 前缀,我们在配置的时候要用 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 作为 key。这种无需侵入程序代码,是更为推荐的方式。

我们可以直接在机器的环境变量列表中配置,但是如果只是开发环境的话也可以通过 launchSettings.json 。

在这里插入图片描述
无论是那种配置方式,如果需要同时激活多个外部程序集可以用英文逗号 ; 分隔。除了 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 环境变量之外,和外部程序集有关的配置还有 ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES,用于排除要激活的程序集,ASPNETCORE_PREVENTHOSTINGSTARTUP,用于配置是否禁止外部程序集。



参考文章:

官方文档-托管启动程序集
理解ASP.NET Core - Startup



ASP.NET Core 系列总结:

目录:ASP.NET Core 系列总结
上一篇:ASP.NET Core — 入口文件
下一篇:ASP.NET Core - .NET 6 的入口文件

http://www.yayakq.cn/news/274699/

相关文章:

  • 手机网站页面设计要求海南千筑建设工程有限公司网站
  • 商城和营销型网站建设免费交友软件
  • 旅游门户网站方案dnsprefetch wordpress
  • 哈尔滨寸金网站建设价格网站制作怎样做
  • 顺德网站建设公司有哪些建立网站一般包括什么等方式
  • 网站建设费用摊销多少年专业的logo设计
  • 做淘宝客必须有网站吗云主机服务器
  • 广州大型网站制作公司电子商务网站推广案例
  • 玉溪网站建设现状苏州企业网站制作电话
  • 权威发布的意思是什么seo专业培训学费多少钱
  • 医疗网站建设行情怎么开微商城网店步骤
  • 黔江做网站深圳广告网站设计制作
  • 建立网站一般要多少钱wordpress+手机端
  • 个人网站需要多大空间做网站图片属性
  • 大众点评做团购网站长沙的在线商城网站建设
  • 郑州企业网站优化哪家便宜网站访问统计怎么做
  • 织梦做网站详细教程百度怎么提交网站地图
  • 电子网站开发技术包括长沙房价2021新楼盘价格
  • 优质的网站建设网站 没有域名需要备案吗
  • 深圳大型网站设计公司域名解析后网站打不开
  • 大型网站 开发流程潍坊网站托管
  • 网站建设文件夹名字工作组赴哈尔滨
  • 网站点击弹出下载框 怎么做的什么是搜索引擎?
  • 揭阳网站定制香河住房和建设局网站
  • 商城微网站开发微网站信誉楼线上商城小程序
  • 做试题网站网站建设安全技术
  • 网站开发培训程序员济阳做网站多少钱
  • 网站开发付款分几步模具钢东莞网站建设
  • 做旅游网站多少钱投资公司注册资金需要多少
  • 网站建站公司费用南宁seo规则