You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过API配置文件连接Oracle数据库时如何在Repository中引用连接字符串

实现步骤

步骤1:在Startup.cs中注册配置和服务

你之前只是读取了配置对象,没有将其注入到依赖注入(DI)容器中,所以Repository层无法直接获取。修改ConfigureServices方法,添加如下注册逻辑:

public void ConfigureServices(IServiceCollection services)
{
    // 其他原有服务注册逻辑...

    // 1. 绑定appsettings.json中的Oracle配置节点,注册配置类
    var oracleDbSettings = Configuration.GetSection(nameof(OracleDbSettings)).Get<OracleDbSettings>();
    services.AddSingleton(oracleDbSettings);

    // 2. 注册你的Repository服务,根据业务场景选择合适的生命周期,API场景常用Scoped
    services.AddScoped<IOracleDataRepository, OracleDataRepository>();
}

如果你需要支持配置热更新,可以改用Options模式注册:

services.Configure<OracleDbSettings>(Configuration.GetSection(nameof(OracleDbSettings)));

步骤2:在Repository中注入配置并使用

在你的Repository类的构造函数中注入已经注册的OracleDbSettings对象,即可直接调用拼接好的连接字符串:

// 定义Repository接口
public interface IOracleDataRepository
{
    // 你的业务方法声明,比如获取数据的方法
    Task<List<YourBusinessModel>> GetBusinessDataAsync();
}

// Repository实现类
public class OracleDataRepository : IOracleDataRepository
{
    private readonly OracleDbSettings _dbSettings;

    // 构造函数注入,DI容器会自动传入你注册的配置实例
    public OracleDataRepository(OracleDbSettings dbSettings)
    {
        _dbSettings = dbSettings;
    }

    public async Task<List<YourBusinessModel>> GetBusinessDataAsync()
    {
        // 直接使用配置类里拼接好的ConnectionString即可
        using (var con = new OracleConnection(_dbSettings.ConnectionString))
        {
            await con.OpenAsync();
            // 你的数据库查询、序列化/反序列化等业务逻辑...
        }
    }
}

如果使用Options模式注册,注入和取值的写法调整为:

public OracleDataRepository(IOptions<OracleDbSettings> dbSettingsOptions)
{
    _dbSettings = dbSettingsOptions.Value;
}

可选优化:直接注入OracleConnection

如果不想每次手动创建连接,可以直接把OracleConnection注册到DI容器,进一步简化代码:

// 在ConfigureServices中添加注册逻辑
services.AddScoped<OracleConnection>(sp =>
{
    var settings = sp.GetRequiredService<OracleDbSettings>();
    return new OracleConnection(settings.ConnectionString);
});

此时Repository的写法可以简化为:

public class OracleDataRepository : IOracleDataRepository
{
    private readonly OracleConnection _con;

    public OracleDataRepository(OracleConnection con)
    {
        _con = con;
    }

    public async Task<List<YourBusinessModel>> GetBusinessDataAsync()
    {
        await _con.OpenAsync();
        // 直接使用_con执行操作即可,DI容器会在请求结束后自动释放连接,无需手动写using
        // 后续业务逻辑...
    }
}

提示:生产环境不要将数据库密码明文存储在appsettings.json中,可以使用ASP.NET Core密钥管理器、环境变量、云配置中心等方式存储敏感配置,避免信息泄露。

内容的提问来源于stack exchange,提问作者Telen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:18:03