ASP.NET Core 2.0配置绑定异常:configuration.Get返回空实例求助
我来帮你排查这个配置绑定的问题——核心原因是你在构造函数里调用configuration.Get<DataConfiguration>()时,没有正确定位到appsettings.json里的DataConfiguration节点,导致绑定失败返回空实例。
问题根源
你的appsettings.json结构是根节点下包含DataConfiguration和Logging两个子节点,而configuration.Get<DataConfiguration>()默认会从根节点开始匹配DataConfiguration类的属性(DefaultDatabase、ConnectionString等),但根节点并没有这些属性,自然无法完成绑定,只能返回空对象。
具体修复步骤
1. 修复构造函数中的配置绑定
在构造函数里,需要先通过GetSection("DataConfiguration")定位到对应的配置节点,再调用Get<DataConfiguration>()完成绑定:
public Startup(IConfiguration configuration) { // 先定位到DataConfiguration节点,再绑定到DataConfiguration类 DataConfig = configuration.GetSection("DataConfiguration").Get<DataConfiguration>(); DatabaseFactory.SetDatabases(() => new SqlDatabase(DataConfig.ConnectionString), GetDatabase); Configuration = configuration; }
2. 简化ConfigureServices中的配置注册
你在ConfigureServices里重新new了一个DataConfiguration并手动绑定,其实可以直接复用上面的绑定结果,或者更简洁地直接从配置节获取后注册:
public void ConfigureServices(IServiceCollection services) { // 直接从配置节获取并注册为单例服务,避免重复绑定 var dataConfig = Configuration.GetSection("DataConfiguration").Get<DataConfiguration>(); services.AddSingleton(dataConfig); services.AddMvc(); services.AddTransient<IPatientRepository, PatientRepository>(); }
3. (可选)推荐依赖注入模式
后续如果在其他类(比如PatientRepository)中需要使用DataConfiguration,建议通过构造函数注入的方式获取,而不是依赖Startup类中的DataConfig字段,这更符合.NET Core的依赖注入设计理念:
public class PatientRepository : IPatientRepository { private readonly DataConfiguration _dataConfig; // 通过构造函数注入DataConfiguration public PatientRepository(DataConfiguration dataConfig) { _dataConfig = dataConfig; } // 后续使用_dataConfig即可 }
验证绑定是否成功
修复后,你可以在构造函数里加一个断点,检查DataConfig的属性是否已经正确读取到appsettings.json里的值,确认绑定生效。
内容的提问来源于stack exchange,提问作者Momenee

