将连接字符串从 Startup 传递到任何其他控制器的正确方法

The correct way to pass the connectionstring from Startup to any other controller

我目前正在使用 servicestack 和 asp.net core 2.1 创建一个 Angular 应用程序。我在将连接字符串从 "Startup" 传递到 "AppHost.Configure" 函数时遇到问题(AppHost 继承自 AppHostBase)。这样做的正确方法是什么?我应该在 AppHost 中重新加载整个应用程序设置,然后在 AppHost 中创建一个单例吗?还是我没有想到的其他方式?

我在启动时创建了一个单例,它允许我在其他任何地方访问,但不能在 AppHost 中访问。

如果您的连接字符串配置为普通的 appSetting 键,例如:

"MyConnection": "Server=localhost;Database=MyDb;User Id=test;Password=test;"

然后当您将 .NET Core 的 IConfiguration 传入您的 ServiceStack AppHost 时:

app.UseServiceStack(new AppHost
{
    AppSettings = new NetCoreAppSettings(Configuration)
});

您可以将其作为普通应用程序设置进行检索,例如:

var myConn = AppSettings.GetString("MyConnection");

如果您将其配置在 "ConnectionStrings" 分组下,例如:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost;Database=MyDb;User Id=test;Password=test;"
},

然后您可以从 IConfiguration 对象访问它,例如:

var config = (NetCoreAppSettings) AppSettings;
var myConn = config.Configuration.GetConnectionString("DefaultConnection");

或者您也可以通过配置 hierarchical key notation 访问它,例如:

var myConn = AppSettings.GetString("ConnectionStrings:DefaultConnection");