gpt4 book ai didi

c# - 从不同项目的 appsettings.json 中读取多个连接字符串

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:38 24 4
gpt4 key购买 nike

我正在使用 .Net core v 2.1 来创建网络 API。我的解决方案包含不同的项目层(BLL、DAL、Common 等)并且主项目中有一个 appsettings.json 文件。我的 appsettings.json 文件中有多个连接字符串,我想根据 Controller 中传递的参数选择连接字符串。

这是项目结构和代码:

1)api层

appsettings.json

"ConnectionStrings": {
"CON1": "con1 connectionstring",
"CON2": "con2 connectionstring",
"CON3": "con3 connectionstring"
},

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
}

例如。我正在传递 conn = "CON1"

AccountController.cs

[HttpPost]
[Route("CreateUser")]
public IActionResult CreateUser(string conn, string username)
{
try
{
AccountDL objAccountDL = new AccountDL(); //call account data layer
objAccountDL.CreateUser(conn, username); //conn = "CON1"
return Ok();
}
catch(Exception ex)
{
throw ex;
}
}

2)dal层

AccountDL.cs

public class AccountDL
{
IConfiguration _configuration;
OracleConnection _oracleConnection;
public string CreateUser(string conn, string username)
{
AppConfiguration appConfg = new AppConfiguration(_configuration);
_oracleConnection = appConfg.GetConnection(conn);
}
}

3) 公共(public)配置层

AppConfiguration.cs

public class AppConfiguration
{
public IConfiguration _configuration { get; }

public AppConfiguration(IConfiguration configuration)
{
_configuration = configuration;
}

public OracleConnection GetConnection(string conn)
{
try
{
string connectionString = _configuration.GetSection("ConnectionStrings").GetSection(conn).Value;
OracleConnection dbConn = new OracleConnection(connectionString);
return dbConn;
}
catch(Exception ex)
{
throw ex;
}
}
}

现在我将使用此 dbConn 连接对象进行进一步处理,但我收到 System.NullReferenceException: 'Object reference not set to an instance of an object.' 的异常。

如果我在同一个 api 层中尝试所有这些,那么我将根据传递的参数获取连接字符串,但在重构我的项目后,我想在不同的项目(即 DAL)中使用此连接,我如何获取连接字符串基于不同项目中的参数?提前谢谢你。

最佳答案

因此,您可以通过 GetConnection() 方法从 appsettings.json 文件访问连接字符串值 -

AppConfiguration.cs

public OracleConnection GetConnection(string conn)
{
try
{
string connectionString = _configuration["ConnectionStrings:" + conn];
OracleConnection dbConn = new OracleConnection(connectionString);
return dbConn;
}
catch(Exception ex)
{
throw ex;
}
}

AccountController.cs Controller 中,您需要在该 Controller 的构造函数中注入(inject)IConfiguration对象的依赖。

public class AccountController
{
public IConfiguration _configuration { get; }

public AccountController(IConfiguration configuration)
{
_configuration = configuration;
}

[HttpPost]
[Route("CreateUser")]
public IActionResult CreateUser(string conn, string username)
{
try
{
AccountDL objAccountDL = new AccountDL(_configuration); //call account data layer
objAccountDL.CreateUser(conn, username); //conn = "CON1"
return Ok();
}
catch(Exception ex)
{
throw ex;
}
}
}

因此您还需要修改 AccountDL.cs 类。您需要在构造函数或方法参数中传递该对象。

public class AccountDL
{
IConfiguration _configuration;
OracleConnection _oracleConnection;

public AccountDL(IConfiguration configuration)
{
_configuration = configuration;
}

public string CreateUser(string conn, string username)
{
AppConfiguration appConfg = new AppConfiguration(_configuration);
_oracleConnection = appConfg.GetConnection(conn);
}
}

关于c# - 从不同项目的 appsettings.json 中读取多个连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com