gpt4 book ai didi

c# - 无法在 IHostingStartup 中进行额外配置?

转载 作者:行者123 更新时间:2023-12-05 05:31:45 25 4
gpt4 key购买 nike

使用 Program.cs 中的新 WebApplication ,并向构建器添加一些额外的配置:

var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("extra_appsettings.json");
var app = builder.Build();

我认为该配置在 IHostingStartup 实现中可用,例如

public void Configure(IWebHostBuilder builder) => builder
.ConfigureServices((context, services) => {
context.Configuration.GetConnectionString("connectionStringFromOtherFile")

谁有办法解决这个问题?调试时实际上似乎所有 IHostingStartup直接从 CreateBuilder() 调用实现在我们有机会之前 .AddJsonFile .

最佳答案

您可以执行以下操作,使 extra_appsettings.json 文件(从 Web 应用程序加载)中的设置可用于其他程序集中的 IHostingStartup 实现。

在web应用项目中

不要从 Program.cs 加载那个 extra_appsettings.json 文件,所以删除下面的行。

builder.Configuration.AddJsonFile("extra_appsettings.json");

相反,将 IHostingStartup 实现添加到 Web 应用程序项目本身,并使其加载 extra_appsettings.json 文件。同时设置一个 HostingStartupAttribute

[assembly: HostingStartup(typeof(MyWebApp.HostStartUp))]

namespace MyWebApp;

public class HostStartUp : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
=> builder.ConfigureAppConfiguration(
(context, configurationBuilder) => configurationBuilder.AddJsonFile("extra_appsettings.json")
);
}

在类库项目中

添加一个 IHostingStartup 实现与匹配的 HostingStartupAttribute(就像你已经拥有的那样)。

[assembly: HostingStartup(typeof(MyClassLibrary.HostStartUp))]

namespace MyClassLibrary;

public class HostStartUp : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
=> builder.ConfigureServices((ctx, services) =>
{
var cns = ctx.Configuration.GetConnectionString("DefaultConnection");
// ...
});
}

配置IHostingStartup 实现的加载

documentation显示执行此操作的一种方法是设置 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 环境变量。请注意,Web 应用程序中的那个不需要是此配置的一部分;它作为第一个自动运行。

如果您有多个带有 IHostingStartup 的程序集,顺序很重要。文档中提到订单是有保证的。

When multiple hosting startup assembles are present, their Configure methods are executed in the order that the assemblies are listed.

对于上述设置,环境变量如下所示。

来自 launchSettings.json 文件。

"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "MyClassLibrary"
}

现在,在该其他程序集中的 IModuleStartup 实现中进行以下调用时,连接字符串将可用。

var cns = ctx.Configuration.GetConnectionString("DefaultConnection");

关于c# - 无法在 IHostingStartup 中进行额外配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74292293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com