【发布时间】:2018-11-06 12:16:30
【问题描述】:
我知道这个问题之前已经得到回应,但我似乎无法让它在我的情况下工作。 Visual Studio 中的解决方案包含多个项目,包括 WepApi-project (asp.net core) 和一个类库项目。在类库项目中,我需要访问位于 WebApi 项目中的 appsettings.json 中的一些信息。我尝试按照不同的教程进行操作,到目前为止,结果如下:
Appsettings.json
{
"LoginSettings": {
"email": "test@test.com",
"password": "12345678"
}
}
类建模配置(驻留在类库项目中):
登录设置
public class LoginSettings
{
public string Email { get; set; }
public string Password { get; set; }
}
Startup.cs(WebApi 项目):
public void ConfigureServices(IServiceCollection services)
{
var loginSettings = new LoginSettings
{
Email = Configuration["LoginSettings:email"],
Password = Configuration["LoginSettings:password"]
};
services.AddSingleton(loginSettings);
services.AddOptions();
}
我需要设置的类
public static class Test
{
private readonly LoginSettings settings;
public static async Task<string> GetTokenAsync()
{
var email = settings.Email;
...
}
}
我无法从 LoginSettings 获得任何信息。此外,为了将 LoginSettings 注入构造函数,我尝试使 Test-class 非静态。但是当我尝试实例化 Test-class 时,它会要求一个 LoginSettings 实例。我真的不觉得让 Test-class 非静态,因为它的唯一目的是将字符串返回到另一个类,并且它需要 LoginSettings 这样做。我做错了什么?
问候。
编辑
我已将类 Test 设为非静态。实例化时我要传入什么?
【问题讨论】:
-
如果您的测试类是非静态的,您应该能够执行以下操作:拥有一个私有类级变量(就像您一样,但稍微改变名称)
private readonly LoginSettings _settings;,并注入通过您的构造函数进行类,如下所示:public Test(LoginSettings settings) { _settings = settings; }。您现在应该可以在 Test 类中使用 _settings。 -
但是当我实例化Test-class时,我仍然需要注入一个LoginSetting?
-
好吧,因为你用这行
services.AddSingleton(loginSettings);注入了 LoginSettings,它应该可以在应用程序范围内访问。你应该仍然可以这样做:var email = _settings.Email;然后使用Test.GetTokenAsync();而不必实例化测试。试试看它是否有效,我只是在这一点上吐个球。 -
@ChristopherLake,我通过将 LoginSettings 注入到 Test-class 中,并将 Test-class 注入到使用它的类中来使其工作。我想我还需要大量的学习才能掌握这一切。不过谢谢你的帮助。
-
我们中的任何人都不会停止学习这个职业——如果你问我,这就是福利之一。很高兴我能提供一些帮助:)
标签: asp.net asp.net-core