Я использую .Net core v 2.1 для создания веб-API.Мое решение содержит слои разных проектов (BLL, DAL, Common и т. Д.), И в главном проекте есть один файл appsettings.json.У меня есть несколько строк подключения в моем файле appsettings.json, и я хочу выбрать строку подключения на основе параметра, переданного в контроллер.
Вот структура проекта и код:
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 layer
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) общий конфигурационный слой
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 для дальнейшей обработки, но я получаю Exception как System.NullReferenceException: «Ссылка на объект не установлена на экземпляр объекта.»
Если я пытаюсь всеэто в том же уровне API, то я получаю строку подключения на основе переданного параметра, но после реструктуризации моего проекта я хочу использовать это подключение в другом проекте, например DAL, как я могу получить строку подключения на основе параметров в разных проектах?Заранее спасибо.