如何在 Web 运行时更改 ConnectionStrings API
How to Change ConnectionStrings at Runtime for a Web API
我希望这是一个简单的问题:
How can you change 2 connection strings at runtime in the
Global.asax
under Application_Start()
Web.config
<connectionStrings>
<add connectionString="DB1" value=""/>
<add connectionString="DB2" value=""/>
</connectionStrings>
Global.asax
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
详情
在我开始收到有关我为什么这样做或不应该这样做的问题之前,请参阅以下内容 post .
本质上,我正在尝试将 Key Vault 与 N 层应用程序一起使用。 WebAPI 通过Web.config
定义连接字符串。为了避免硬编码连接字符串,它们将存储在 Key Vault 中。但是,由于使用了 Unit Of Work
模式,我不确定最佳路线,我目前正在尝试找出 injecting 或 [=31= 的潜在解决方案]仅在运行时更改 Web API 项目的连接字符串。
我觉得我可能没有理解这个问题(因为我对 Azure Key Vault 一无所知),但你并没有真正在 Application_Start
...
查看 ,我认为您可以实现一个函数,该函数将 return 基于变量的所需连接字符串:
string GetConnectionString()
{
if (/* some dynamic variable is set */) {
return "DB1";
}
else {
return "DB2";
}
}
现在,假设你有上面的功能,你可以用它来初始化你的DbContext
:
MyDbContext myDbContext = new MyDbContext(GetConnectionString());
或者如果您要注入 DbContext
,您可以在 DI 代码中使用它(ninject 示例):
kernel.Bind<IMyDbContext>()
.ToConstructor(ctorArg => new MyDbContext(GetConnectionString()))
.InRequestScope();
我希望这是一个简单的问题:
How can you change 2 connection strings at runtime in the
Global.asax
underApplication_Start()
Web.config
<connectionStrings>
<add connectionString="DB1" value=""/>
<add connectionString="DB2" value=""/>
</connectionStrings>
Global.asax
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
详情
在我开始收到有关我为什么这样做或不应该这样做的问题之前,请参阅以下内容 post
本质上,我正在尝试将 Key Vault 与 N 层应用程序一起使用。 WebAPI 通过Web.config
定义连接字符串。为了避免硬编码连接字符串,它们将存储在 Key Vault 中。但是,由于使用了 Unit Of Work
模式,我不确定最佳路线,我目前正在尝试找出 injecting 或 [=31= 的潜在解决方案]仅在运行时更改 Web API 项目的连接字符串。
我觉得我可能没有理解这个问题(因为我对 Azure Key Vault 一无所知),但你并没有真正在 Application_Start
...
查看
string GetConnectionString()
{
if (/* some dynamic variable is set */) {
return "DB1";
}
else {
return "DB2";
}
}
现在,假设你有上面的功能,你可以用它来初始化你的DbContext
:
MyDbContext myDbContext = new MyDbContext(GetConnectionString());
或者如果您要注入 DbContext
,您可以在 DI 代码中使用它(ninject 示例):
kernel.Bind<IMyDbContext>()
.ToConstructor(ctorArg => new MyDbContext(GetConnectionString()))
.InRequestScope();