Mun*_*kin 17 c# configuration .net-core asp.net-core .net-6.0
这似乎是一个类似的问题,但没有一个答案适合我的代码...:阅读 Main Program.cs 中的 appsettings.json
这非常相似,但由于某种原因对我不起作用:ASP.NET Core 6 how to access Configuration during setup
我正在将 .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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
using Microsoft.Extensions.Configuration;
// IConfiguration init test
var Configuration = builder.Configuration;
Run Code Online (Sandbox Code Playgroud)
似乎 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"];
Run Code Online (Sandbox Code Playgroud)
我尝试用程序替换启动,但似乎不起作用......
我收到的错误是:
'Program' does not contain a definition for 'Configuration'
Run Code Online (Sandbox Code Playgroud)
Gur*_*ron 28
不需要切换到最小托管模式,您仍然可以使用通用托管(具有启动功能的托管)。
似乎 Microsoft.Extensions.Configuration 甚至没有被使用!
using Microsoft.Extensions.Configuration;
不需要该指令,因为新功能全局 using 指令在 .NET 6 模板中被大量使用。
3.
var 配置 = builder.Configuration;
新模板中的文件Program
使用另一个相对较新的功能 (C# 9) -顶级语句,因此它var Configuration
只是一个只能在生成的Main
方法内部访问的变量。
4.
秘密 = Startup.Configuration["GoogleRecaptchaV3:秘密"];
您可以通过以下方式在顶级语句文件中访问该值:
var secret = builder.Configuration["GoogleRecaptchaV3:Secret"];
Run Code Online (Sandbox Code Playgroud)
为了使设置可以在该文件外部(或Startup
在通用托管中)访问,我强烈建议使用 DI(如此处或此处的文档所示)。
如果您有大量代码依赖于可用的静态配置,并且您需要快速临时修复,您可以partial Program
在顶级语句文件的末尾添加类并执行以下操作:
// ....
WebApplication app = builder.Build();
Configuration = app.Configuration;
// ...
public partial class Program
{
internal static IConfiguration Configuration { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
但我强烈建议不要这样做。
归档时间: |
|
查看次数: |
33466 次 |
最近记录: |