加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

ASP.NET Core使用HostingStartup增强启动操作方法详解

发布时间:2020-12-10 13:07:37 所属栏目:编程 来源:网络整理
导读:这篇文章首要先容了ASP.NET Core行使HostingStartup加强启动操纵,本文给各人先容的很是具体,对各人的进修或事变具有必然的参考小心代价,必要的伴侣可以参考下

起首,通过HostingStartupAssemblies的初始化逻辑我们可以得出,默认会是有两个数据来历,一个是当前的ApplicationName,另一个是通过HostingStartupAssembliesKey设置的措施集信息。这也解答了我们上面说过的为什么HostingStartup在Web措施中不必要设置措施集信息就可以被挪用到,而通过外部措施集引入HostingStartup必要手动指定措施集。其次,我们可以相识到通过设置HostingStartupExcludeAssemblies信息解除你不想启动的HostingStartup措施集,并且还可以通过设置PreventHostingStartup值来榨取行使HostingStartup的成果。
通过上面的代码我们还相识到这三个属性的来历的设置名称都是来自WebHostDefaults这个常量类,接下来我们查察一下这三个属性对应的设置名称

public static readonly string HostingStartupAssembliesKey = "hostingStartupAssemblies"; public static readonly string HostingStartupExcludeAssembliesKey = "hostingStartupExcludeAssemblies"; public static readonly string PreventHostingStartupKey = "preventHostingStartup";

也就是说,我们可以可以通过设置这三个名称的设置,来完成HostingStartup相干的成果好比

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { //通过UseSetting的方法指定措施集的名称 webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "HostStartupLib"); //假如HostingStartup存在多个措施齐集可以行使;脱离,好比HostStartupLib;HostStartupLib2 //webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "HostStartupLib;HostStartupLib2"); //解除执行HostStartupLib2措施集执行HostingStartup逻辑 webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "HostStartupLib2"); //禁用HostingStartup成果 webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true"); webBuilder.UseStartup<Startup>(); });

或通过情形变量的方法去操纵

"environmentVariables": { "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "HostStartupLib", //假如HostingStartup存在多个措施齐集可以行使;脱离,好比HostStartupLib;HostStartupLib2 //"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "HostStartupLib;HostStartupLib2" //解除执行HostStartupLib2措施集执行HostingStartup逻辑 "ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES":"HostStartupLib2", //禁用HostingStartup成果 "ASPNETCORE_PREVENTHOSTINGSTARTUP":"true" }

其拭魅这两种设置方法是完全等价的,为什么这么说呢?起首是在Configuration中获取设置是忽略巨细写的,着实是行使ConfigureWebHostDefaults设置WebHost相干信息的时辰会添加configBuilder.AddEnvironmentVariables(prefix: "ASPNETCORE_")逻辑这样的话获取情形变量的时辰可以忽略ASPNETCORE_前缀。
那么到今朝为止,尚有一个疑问尚未办理,那就是为何只能通过UseSetting和情形变量的方法去设置HostingStartup相干设置,解铃还须系铃人,我们在上面的ExecuteHostingStartups要领中看到了这个逻辑

//这里转达了一个_config var webHostOptions = new WebHostOptions(_config, Assembly.GetEntryAssembly()?.GetName().Name);

我们可以看到转达了设置Configuration的实例_config,我们到初始化_config处全部如下逻辑

var configBuilder = new ConfigurationBuilder() .AddInMemoryCollection(); if (!options.SuppressEnvironmentConfiguration) { //添加情形变量 configBuilder.AddEnvironmentVariables(prefix: "ASPNETCORE_"); } //构建了_config实例 private readonly IConfiguration _config = configBuilder.Build();

也就可以表明为何我们可以通过情形变量去设置HostingStartup,然后我们再来看UseSetting要领的逻辑

public IWebHostBuilder UseSetting(string key, string value) { _config[key] = value; return this; }

原本UseSetting也是给_config实例配置值,以是无论通过UseSetting或情形情形变量的方法去设置,本质都是在操纵_config这个设置实例,到此为止全部谜团均以解开。

在SkyAPM中的行使

我们上面说了HostingStartup可以加强启动时辰的操纵,可以通过对现有代码无入侵的方法加强措施成果。而SkyAPM-dotnet也正是行使了这个成果,实现了无入侵启动APM监控。我们往返首一下SkyAPM-dotnet的行使方法

起首是行使Nuget添加SkyAPM.Agent.AspNetCore措施集引用。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读