为什么WebHost.CreateDefaultBuilder.UseConfiguration没有将配置传递给应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么WebHost.CreateDefaultBuilder.UseConfiguration没有将配置传递给应用程序相关的知识,希望对你有一定的参考价值。

WebHost.CreateDefaultbuilder(args).UseConfiguration,默认情况下,应该使用webhost和应用程序的配置。 ConfigureAppConfiguration仅用于配置应用程序,而不是主机。

以下代码之前正在运行,没有任何问题。从.net核心2.1更新到2.2并更新一些nuget软件包以支持.net核心2.2后,代码不再有效。

我确实找到了一个肮脏的黑客,但我想摆脱这个,因为我担心将来可能会得到一些不必要的结果。

return WebHost.CreateDefaultBuilder(args)
    .UseContentRoot(AppDomain.CurrentDomain.BaseDirectory)
    .UseConfiguration(ConfigurationService.Config)
    // Dirty hack to temp fix my problem
    //.ConfigureAppConfiguration(configuration => configuration.AddConfiguration(ConfigurationService.Config))
    .UseStartup<Startup>()
    .UseSerilog()
    .Build();

ConfigurationService.Config是在调用webhost之前的静态ConfigurationRoot构建。 ConfigurationService还会开始记录,确定某些目录和其他内容。

返回的配置包含:environment,appsettings.json文件,custom.json文件和命令行提供程序。我知道这适用于主机,因为custom.json文件中的kestrel配置。在所有更改之前,如果我向IConfigurationRoot添加依赖项,我也会看到相同的提供程序。

现在我在IConriguration依赖项(链接,环境,appsettings,appsetting.development,命令行)上看到了默认的.net核心提供程序(最重要的一个,我的custom.json文件不在这里)。

我已经尝试过不使用静态图标配置根,并使用返回WebHost的相同方法构建它,但无效,因此它与我的ConfigurationService无关。

答案

好的,我的错误。

我试图从我的一个方法中通过serviceprovider获取选项。但由于应用尚未启动,我首先必须手动构建serviceCollection。

以上是关于为什么WebHost.CreateDefaultBuilder.UseConfiguration没有将配置传递给应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Redis 为什么面试都问我却不懂?因为它快吗?它为什么快?

CodeBlocks中这是为啥啊

为什么选择容器技术,又为什么选择了kubernetes?

Full GC为什么那么慢?为什么老年代垃圾回收效率比新生代低很多?为什么Minor gc速度比Major GC慢?

转载 JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要动静分离?

如何回答「为什么想做产品经理」面试核心问题3