我在服务中从 Appsettings.json 访问值时遇到问题。
技术栈:微服务与ServiceStack.core:5.12.0,C#,.Net 6
我正在尝试从以下 Appsettings.json 访问值
{
"username" : "[email protected]"
}
以下是我的配置
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IAppSettings, AppSettings>();
}
配置方法:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseServiceStack(
new HttpServiceHost
{
AppSettings = new NetCoreAppSettings(Configuration)
});
}
主持人班:
public class HttpServiceHost : AppHostBase
{
public HttpServiceHost () : base("Test Service" , typeOf(somehandler).assembly){}
}
我正在尝试访问类 TestConfig 构造函数(而不是处理程序)中的应用程序设置,如下所示
public class TestConfig
{
public class TestConfig (IAppSettings setting)
{
// This always comes as null
this.UserName = setting.GetString("username")
// But this returns the value
this.UserName = HostContext.AppSettings.GetString("username")
}
public string UserName {get;set;}
}
以下是对TestConfig的调用
var testConfig = new TestConfig (new AppSeetings())
如何让IAppSettings设置返回appsettings值?
注意:我正在将服务从 .Net Framework 4.5 升级到 NET 6,它可以正常工作,没有任何问题。
谢谢!
您似乎正在使用 AppSettings 的新实例初始化 TestConfig,该实例不会从 appsettings.json 填充任何值。
相反,您应该将 IAppSettings 注入到您需要的类中,ASP.NET Core 依赖注入系统将为您提供配置的实例。
您需要在Startup.cs中的ConfigureServices方法中注册您的TestConfig类,以便可以将IAppSettings注入其中。
请像这样更改您的ConfigureServices方法:
csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IAppSettings, NetCoreAppSettings>(s => new NetCoreAppSettings(Configuration));
services.AddSingleton<TestConfig>();
}
然后您应该更改 TestConfig 类的实例化。您不应该直接使用 new 实例化它。相反,您应该从服务集合中检索它(通过构造函数注入或服务定位器模式)。这是控制器中构造函数注入的示例:
csharp:
public class TestController : ControllerBase
{
private readonly TestConfig _testConfig;
public TestController(TestConfig testConfig)
{
_testConfig = testConfig;
}
public IActionResult Index()
{
var username = _testConfig.UserName;
//...
}
}
在上面的示例中,TestConfig 实例通过.NET 依赖注入系统注入到控制器中,并且可以从中访问 UserName。
确保您没有像此处那样在代码中的任何位置创建 AppSettings 的新实例:var testConfig = new TestConfig(new AppSettings())。相反,您应该从服务集合中检索已配置的实例。
另外,请记住确保将 appsettings.json 文件复制到输出目录。您可以通过转到文件属性并将“复制到输出目录”设置为“如果较新则复制”来确保这一点。