.NET8 Blazor Server启动报错:无法实例化IHostEnvironment
.NET8 Blazor Server启动异常:无法实例化IHostEnvironment的解决方法
问题出在你ConfigureAppConfiguration方法里的var builder = config.Build();这一行。
这行代码会提前触发配置系统的构建流程,而此时DI容器还没完成IHostEnvironment的注册工作,后续你尝试获取context.HostingEnvironment时,就会抛出无法实例化的异常。
另外补充一点:Host.CreateDefaultBuilder(args)本身已经默认帮你添加了appsettings.json、对应环境的配置文件以及环境变量,你这段手动添加的配置其实是重复操作,但核心问题还是提前Build配置导致的依赖解析失败。
修复后的代码如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { // 删除提前构建配置的代码 var env = context.HostingEnvironment; // 若需手动覆盖默认配置(默认已包含这些),可保留以下代码 config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); }) .UseSerilog((context, services, configuration) => configuration .ReadFrom.Configuration(context.Configuration) .ReadFrom.Services(services) .Enrich.FromLogContext()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
总结:不要在ConfigureAppConfiguration里提前调用config.Build(),context.HostingEnvironment可以直接从上下文参数中获取,无需先构建配置。
内容的提问来源于stack exchange,提问作者Ivan Debono
相关产品推荐
相关产品推荐

