Program.cs 中的 .NET 6(稳定)IConfiguration 设置
.NET 6 (stable) IConfiguration setup in Program.cs
这似乎是一个类似的问题,但 none 的答案适合我的代码...:
这非常相似,但出于某种原因对我不起作用:
我正在将 .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都没用!我得到的语法来自这个博客 post: https://gavilan.blog/2021/08/19/getting-the-iconfiguration-in-the-program-class-asp-net-core-6/
这个问题很原始,但我似乎没有做对。感谢任何帮助解决这个问题,因为它适用于新的 .NET 6 minimal API.
我发现这个指南很有用,但它显然没有解决手头的问题:
https://www.mikesdotnetting.com/article/357/razor-pages-startup-in-net-6
在另一个模型中,我有这个代码也不再有效:
secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];
path = Startup.Configuration["GoogleRecaptchaV3:ApiUrl"];
我尝试用 Program 替换 Startup 但它似乎不起作用...
我遇到的错误是:
'Program' does not contain a definition for 'Configuration'
正在切换到 minimal hosting model is not required, you can still use the generic hosting(启动的那个)。
It seems that the Microsoft.Extensions.Configuration isn't even used!
不需要 using Microsoft.Extensions.Configuration;
指令,因为新功能 在 .NET 6 模板中被大量使用。
3.
var Configuration = builder.Configuration;
新模板中的 Program
文件使用了另一个相对较新的功能 (C# 9) - top-level statements,因此 var Configuration
只是一个变量,只能在生成的 Main
方法。
4.
secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];
您可以通过以下方式在 top-level 语句文件中访问此值:
var secret = builder.Configuration["GoogleRecaptchaV3:Secret"];
要使设置可在该文件之外访问(或在通用托管中 Startup
),我强烈建议使用 DI(如文档 here or here 中所示)。
如果您有大量代码依赖于可用的静态配置并且您需要快速临时修复,您可以在 top-level 末尾添加 partial Program
class语句文件并执行如下操作:
// ....
WebApplication app = builder.Build();
Configuration = app.Configuration;
// ...
public partial class Program
{
internal static IConfiguration Configuration { get; private set; }
}
但我强烈建议不要这样做。
以下是基本的直接实现:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var config = app.Configuration;
根据 Guru Stron 的评论进行编辑。
这似乎是一个类似的问题,但 none 的答案适合我的代码...:
这非常相似,但出于某种原因对我不起作用:
我正在将 .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都没用!我得到的语法来自这个博客 post: https://gavilan.blog/2021/08/19/getting-the-iconfiguration-in-the-program-class-asp-net-core-6/
这个问题很原始,但我似乎没有做对。感谢任何帮助解决这个问题,因为它适用于新的 .NET 6 minimal API.
我发现这个指南很有用,但它显然没有解决手头的问题: https://www.mikesdotnetting.com/article/357/razor-pages-startup-in-net-6
在另一个模型中,我有这个代码也不再有效:
secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];
path = Startup.Configuration["GoogleRecaptchaV3:ApiUrl"];
我尝试用 Program 替换 Startup 但它似乎不起作用...
我遇到的错误是:
'Program' does not contain a definition for 'Configuration'
正在切换到 minimal hosting model is not required, you can still use the generic hosting(启动的那个)。
It seems that the Microsoft.Extensions.Configuration isn't even used!
不需要 using Microsoft.Extensions.Configuration;
指令,因为新功能
3.
var Configuration = builder.Configuration;
新模板中的 Program
文件使用了另一个相对较新的功能 (C# 9) - top-level statements,因此 var Configuration
只是一个变量,只能在生成的 Main
方法。
4.
secret = Startup.Configuration["GoogleRecaptchaV3:Secret"];
您可以通过以下方式在 top-level 语句文件中访问此值:
var secret = builder.Configuration["GoogleRecaptchaV3:Secret"];
要使设置可在该文件之外访问(或在通用托管中 Startup
),我强烈建议使用 DI(如文档 here or here 中所示)。
如果您有大量代码依赖于可用的静态配置并且您需要快速临时修复,您可以在 top-level 末尾添加 partial Program
class语句文件并执行如下操作:
// ....
WebApplication app = builder.Build();
Configuration = app.Configuration;
// ...
public partial class Program
{
internal static IConfiguration Configuration { get; private set; }
}
但我强烈建议不要这样做。
以下是基本的直接实现:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var config = app.Configuration;
根据 Guru Stron 的评论进行编辑。