.NET 5中如何将appsettings.json绑定到类并实现依赖注入
.NET 5 API 配置绑定与依赖注入实现步骤
1. 类库项目补充接口定义
你需要先在类库中定义IConfigurationSettings接口,作为依赖注入的抽象约定,同时修改现有配置类实现该接口:
// 新增接口定义 public interface IConfigurationSettings { ConnectionStrings ConnectionStrings { get; set; } } // 修改原有配置类,实现接口 public class ConfigurationSettings : IConfigurationSettings { public ConnectionStrings ConnectionStrings { get; set; } // 如需支持静态访问,新增静态实例属性 public static IConfigurationSettings Instance { get; set; } } // 原有ConnectionStrings类无需修改 public class ConnectionStrings { public string DefaultConnection { get; set; } public string Other { get; set; } }
如果类库未包含配置绑定相关依赖,请安装对应NuGet包:
Microsoft.Extensions.Configuration.BinderMicrosoft.Extensions.DependencyInjection.Abstractions
2. API项目注册配置与服务
打开.NET 5 API项目的Startup.cs文件,在ConfigureServices方法中添加配置绑定和服务注册逻辑:
public void ConfigureServices(IServiceCollection services) { // 从appsettings.json绑定对应配置节点 var configurationSettings = new ConfigurationSettings(); Configuration.GetSection("ConfigurationSettings").Bind(configurationSettings); // 注册到依赖注入容器,支持构造函数注入IConfigurationSettings services.AddSingleton<IConfigurationSettings>(configurationSettings); // 给静态属性赋值,支持全局静态访问配置 ConfigurationSettings.Instance = configurationSettings; // 保留原有其他服务注册逻辑 services.AddControllers(); // ...其他原有代码 }
3. 功能验证
依赖注入方式使用
直接在类的构造函数中注入IConfigurationSettings即可,和你给出的示例完全兼容:
private readonly IEmpleadoRepository _empleadoRepository; private readonly IMapper _mapper; private readonly IConfigurationSettings _config; public GetEmpleadoByIdHandler(IEmpleadoRepository empleadoRepository, IMapper mapper, IConfigurationSettings config) { _empleadoRepository = empleadoRepository; _mapper = mapper; _config = config; } // 使用示例 public void Test() { string connString = _config.ConnectionStrings.DefaultConnection; }
静态方式使用
通过配置类的静态实例直接读取配置:
string connString = ConfigurationSettings.Instance.ConnectionStrings.DefaultConnection;
注意事项
- 请确保
appsettings.json文件的「复制到输出目录」属性设置为「如果较新则复制」,否则会出现配置读取为空的问题 - 配置节点名称和类属性名称大小写不敏感,但建议保持完全一致避免匹配异常
- 如果你后续升级到.NET 6+,注册逻辑仅需调整为在
Program.cs中通过builder.Configuration和builder.Services操作即可,核心绑定逻辑不变
内容的提问来源于stack exchange,提问作者EnMiPcFunciona
相关产品推荐
相关产品推荐

