为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
喵喔喔 2022-10-23 16:20:56
我正在使用 .Net core v 2.1 创建 web api。我的解决方案包含不同的项目层(BLL、DAL、Common 等),并且主项目中有一个 appsettings.json 文件。我的 appsettings.json 文件中有多个连接字符串,我想根据控制器中传递的参数选择连接字符串。这是项目结构和代码:1) api层应用设置.json"ConnectionStrings": {    "CON1": "con1 connectionstring",    "CON2": "con2 connectionstring",    "CON3": "con3 connectionstring"},启动.cspublic 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.cspublic class AccountDL{    IConfiguration _configuration;    OracleConnection _oracleConnection;    public string CreateUser(string conn, string username)    {        AppConfiguration appConfg = new AppConfiguration(_configuration);           _oracleConnection = appConfg.GetConnection(conn);    }}3) 通用配置层应用配置.cspublic 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,我怎样才能获得基于参数的连接字符串在不同的项目中?先感谢您。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

因此,您可以从 appsettings.json 文件中访问连接字符串值以获取GetConnection()这样的方法 -


应用配置.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控制器中,您需要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);

    }

}


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号