如何在Startup.cs中实例化一个单例类,然后在net core中使用?



我正在从我的appsetting中创建的对象创建一个对象。我通过singleton添加它,但我不知道如何访问这些值。

我的类:

public class UserConfiguration
{
public string Username { get; set; }
public string Password { get; set; }
public string SecretKey{ get; set; }
}

In my 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

中加载的单例值

由于你将UserConfiguration注册为DI容器的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模式

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"
}
}

最新更新