通过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
相关产品推荐
相关产品推荐

