- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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
实现。
不要从 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/
使用 Program.cs 中的新 WebApplication ,并向构建器添加一些额外的配置: var builder = WebApplication.CreateBuilder(args);
不支持尝试从 IHostingStartup 实现和构造函数注入(inject)中访问 IConfiguration。 正常的 Startup.cs 实现允许注入(inject) IConfigura
我是一名优秀的程序员,十分优秀!