ASP.NET Core 7 Web API类如何通过依赖注入访问配置解决CS0103错误
在ASP.NET Core 7中让Core类通过依赖注入访问配置
先解决你遇到的CS0103错误:你直接在Core类里引用Configuration但它既不是该类的成员,也没有通过依赖注入获取,所以即使引入了命名空间也没用——Configuration是需要注入的实例,不是静态可直接调用的对象。下面是无需显式传参的解决方案:
方案一:使用强类型配置(推荐,类型安全)
1. 创建配置模型类
定义一个和配置节点对应的类,用来绑定连接字符串:
public class DatabaseSettings { public string ConnectionString { get; set; } = string.Empty; }
2. 在Program.cs中绑定配置并注册服务
将配置文件中的节点绑定到模型,并注入到容器:
// 假设你appsettings.json里的节点是"Database:ConnectionString" builder.Services.Configure<DatabaseSettings>(builder.Configuration.GetSection("Database")); // 同时注册Core类到容器(根据业务需求选Scoped/Singleton/Transient) builder.Services.AddScoped<Core>();
3. 在Core类中通过构造函数注入
修改Core类的构造函数,接收IOptions<DatabaseSettings>实例:
public class Core { private readonly DatabaseSettings _dbSettings; public Core(IOptions<DatabaseSettings> dbSettings) { _dbSettings = dbSettings.Value; } public void GetMenu() { // 直接使用绑定好的连接字符串 string connStr = _dbSettings.ConnectionString; // 你的数据库操作逻辑 } }
方案二:直接注入IConfiguration(快速实现,适合简单场景)
1. 在Program.cs中注册Core类
框架默认已经注册了IConfiguration,你只需要注册Core类即可:
builder.Services.AddScoped<Core>();
2. 在Core类中注入IConfiguration
public class Core { private readonly IConfiguration _config; public Core(IConfiguration config) { _config = config; } public void GetMenu() { // 读取连接字符串 string connStr = _config.GetConnectionString("DefaultConnection"); // 你的逻辑代码 } }
注意事项
- 无论哪种方案,都需要确保Core类已经被注册到依赖注入容器,否则无法自动注入依赖
- 强类型配置更适合复杂的配置结构,能避免硬编码配置键,减少出错概率
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

