您可以执行以下操作以使 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")
);
}
在类库项目中
添加具有匹配HostingStartupAttribute 的IHostingStartup 实现(就像您已经拥有的一样)。
[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 应用程序必须设置为第一个。
文档提到订单是有保证的。
当存在多个托管启动程序集时,它们的Configure 方法将按照程序集列出的顺序执行。
对于上述设置,环境变量如下所示。
来自launchSettings.json 文件。
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "MyWebApp;MyClassLibrary"
}