ASP.NET Core使用HostingStartup增强启动操作方法详解
起首,通过HostingStartupAssemblies的初始化逻辑我们可以得出,默认会是有两个数据来历,一个是当前的ApplicationName,另一个是通过HostingStartupAssembliesKey设置的措施集信息。这也解答了我们上面说过的为什么HostingStartup在Web措施中不必要设置措施集信息就可以被挪用到,而通过外部措施集引入HostingStartup必要手动指定措施集。其次,我们可以相识到通过设置HostingStartupExcludeAssemblies信息解除你不想启动的HostingStartup措施集,并且还可以通过设置PreventHostingStartup值来榨取行使HostingStartup的成果。 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_前缀。 //这里转达了一个_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措施集引用。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |