如何解决如何在 Startup.cs 中实例化一个单例类,然后在网络核心中使用?
我正在从 appsetting.json 中创建的对象创建一个对象,我通过单例添加它,但我不知道如何访问这些值。
我的班级:
public class UserConfiguration
{
public string Username { get; set; }
public string Password { get; set; }
public string SecretKey{ get; set; }
}
在我的 startup.cs 中
var userCfg = Configuration.GetSection("UserConfig").Get<UserConfiguration>(); //.> success i've values
services.AddSingleton(userCfg);
services.AddControllers();
我想使用这个类,我从我的控制器 api 中调用这个类。
public class UserService : BaseService
{
public UserService(IConfiguration config): base(configuration)
{
}
public string GetData()
{
var userConfg = new UserConfiguration();
var key = user.SecretKey; //--> null but a instance is empty
return "ok"
}
}
但是我不知道如何拯救我在Startup.cs中加载的singleton的值
解决方法
由于您使用 DI 容器将 UserConfiguration 注册为 Singleton,因此您可以注入此对象 UserService 构造函数:
public class UserService : BaseService
{
private UserConfiguration _userConfiguration;
public UserService(IConfiguration config,UserConfiguration userConfiguration): base(configuration)
{
_userConfiguration = userConfiguration; //Injected in constructor by DI container
}
public string GetData()
{
var key = _userConfiguration .SecretKey;
return "ok"
}
}
然而,推荐的将应用程序配置信息传递给服务的方法是使用 Options pattern
services.Configure<UserConfiguration>(Configuration.GetSection("UserConfig"));
services.AddControllers();
添加然后访问配置选项:
public class UserService : BaseService
{
private UserConfiguration _userConfiguration;
public UserService(IConfiguration config,IOptions<UserConfiguration> userConfiguration): base(configuration)
{
_userConfiguration = userConfiguration.Value; //Injected in constructor by DI container
}
public string GetData()
{
var key = _userConfiguration .SecretKey;
return "ok"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。