.NET Core 7 Minimal API服务类中如何访问appsettings?
在.NET Core 7 Minimal API的服务类中访问AppSettings的正确方式
方法一:直接注入IConfiguration
- 第一步:在Program.cs中注册你的服务类(根据业务需求选择生命周期:Scoped/Transient/Singleton)
var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddJsonFile("appsettings.Local.json", true); // 注册服务类到DI容器 builder.Services.AddScoped<YourService>(); var app = builder.Build(); // ... 其他端点配置
- 第二步:在服务类的构造函数中接收IConfiguration实例,之后即可直接访问配置项
public class YourService { private readonly IConfiguration _config; public YourService(IConfiguration config) { _config = config; } public string GetParameterA() { // 通过键路径读取配置 return _config["groupParameterOne:ParameterA"] ?? string.Empty; } }
- 第三步:在Minimal API端点中注入服务类使用
app.MapGet("/get-param", (YourService service) => { var paramA = service.GetParameterA(); return Results.Ok(new { ParameterA = paramA }); });
方法二:使用强类型配置(推荐)
这种方式更类型安全,便于维护和测试,适合配置项较多的场景。
- 第一步:创建对应配置节点的强类型类
public class GroupParameterSettings { public string ParameterA { get; set; } = string.Empty; // 可添加同组下的其他配置属性 }
- 第二步:在Program.cs中绑定配置并注册到DI容器
var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddJsonFile("appsettings.Local.json", true); // 将配置节点绑定到强类型类,并注册到DI builder.Services.Configure<GroupParameterSettings>(builder.Configuration.GetSection("groupParameterOne")); // 注册服务类 builder.Services.AddScoped<YourService>(); var app = builder.Build(); // ... 其他端点配置
- 第三步:在服务类中注入
IOptions<GroupParameterSettings>
public class YourService { private readonly GroupParameterSettings _settings; public YourService(IOptions<GroupParameterSettings> settings) { _settings = settings.Value; } public string GetParameterA() { // 直接访问强类型属性 return _settings.ParameterA; } }
- 第四步:在Minimal API端点中使用服务类(和方法一一致)
为什么不推荐静态类方案
静态类存储配置会导致:
- 耦合度高,难以替换配置源(比如单元测试时无法轻松切换为内存配置)
- 不符合依赖注入的设计原则,降低代码的可测试性和可维护性
- 无法利用DI容器的生命周期管理特性
内容的提问来源于stack exchange,提问作者Zen Christophe
相关产品推荐
相关产品推荐

