【问题标题】:Extra config in IHostingStartup not possible?IHostingStartup 中的额外配置不可能?
【发布时间】:2022-11-03 05:01:16
【问题描述】:

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

【问题讨论】:

    标签: asp.net .net-6.0


    【解决方案1】:

    您可以执行以下操作以使 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")
                );
    }
    

    在类库项目中

    添加具有匹配HostingStartupAttributeIHostingStartup 实现(就像您已经拥有的一样)。

    [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"
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2022-12-14
      • 2021-05-20
      • 1970-01-01
      • 2012-03-05
      • 2017-12-12
      相关资源
      最近更新 更多