.NET 6(稳定)IProgram.cs 中的配置设置

问题描述 投票:0回答:2

这似乎是一个类似的问题,但没有一个答案适合我的代码...:阅读 Main Program.cs 中的 appsettings.json

这非常相似,但由于某种原因对我不起作用:ASP.NET Core 6 如何在安装过程中访问配置

我正在将 .NET 6 beta 应用程序移植到 .NET 6 的稳定版本。

这意味着我想移植负责导入 IConfiguration 的代码(是的,我知道它向后兼容单独的

Startup.cs
Program.cs
文件,但我愿意使用新语法)。 IConfiguration 基本上就是 ASP.NET Core 中的 appsettings.json 文件。

在旧代码中,它看起来像这样:

 public class Startup
    {
        internal static IConfiguration Configuration { get; private set; }
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

我尝试了以下方法:

using Microsoft.Extensions.Configuration;
// IConfiguration init test
var Configuration = builder.Configuration;

似乎 Microsoft.Extensions.Configuration 甚至没有被使用!我得到的语法来自这篇博客文章:https://gavilan.blog/2021/08/19/getting-the-iconfiguration-in-the-program-class-asp-net-core-6/

这个问题很原始,但我好像没搞对。感谢任何帮助解决这个问题,因为它可以在新的 .NET 6 最小 API 中工作。

我发现本指南很有用,但它显然没有解决手头的问题: https://www.mikesdotnetting.com/article/357/razor-pages-startup-in-net-6

在另一个模型中,我有这个代码,它也不再有效:

secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];
                path = Startup.Configuration["GoogleRecaptchaV3:ApiUrl"];

我尝试用程序替换启动,但似乎不起作用......

我遇到的错误是:

'Program' does not contain a definition for 'Configuration'
c# asp.net-core .net-core configuration .net-6.0
2个回答
28
投票
  1. 无需切换到最小托管模式,您仍然可以使用通用托管(具有启动功能的托管模式)。

似乎 Microsoft.Extensions.Configuration 甚至没有被使用!

不需要

using Microsoft.Extensions.Configuration;
指令,因为新功能 global using 指令 在 .NET 6 模板中被大量使用。

3.

var 配置 = builder.Configuration;

新模板中的

Program
文件使用另一个相对较新的功能 (C# 9) - 顶级语句,因此
var Configuration
只是一个只能在生成的
Main
方法内访问的变量。

4.

secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];

您可以通过以下方式在顶级语句文件中访问该值:

var secret = builder.Configuration["GoogleRecaptchaV3:Secret"];

为了使设置可以在该文件外部访问(或通用托管中的

Startup
),我强烈建议使用 DI(如文档herehere中所示)。

如果您有大量代码依赖于可用的静态配置,并且需要快速临时修复,您可以在顶级语句文件的末尾添加

partial Program
类并执行以下操作:

// ....
WebApplication app = builder.Build();
Configuration = app.Configuration;
// ...

public partial class Program
{
    internal static IConfiguration Configuration  { get; private set; }
}

但我强烈建议不要这样做。


3
投票

以下是基本且直接的实现:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var config = app.Configuration;

根据 Guru Stron 的评论进行编辑。

© www.soinside.com 2019 - 2024. All rights reserved.