我正在创建一个全局变量,但首先需要使用数据对其进行初始化。该变量似乎正在运行,但是未设置初始化数据。这是我的ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
//Gets data for the Global variable
MyOptions opt = SetValues();
Action<MyOptions> options = (set => set = opt);
services.Configure(options);
services.Configure<MyOptions>(options);
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<MyOptions>>().Value);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
然后在不同的控制器中,我这样称呼它;
public ValuesController(IOptions<MyOptions> options)
{
Options = settings.Value;
}
在测试中,控制器可以更改Options
中的属性,但是,在MyOptions opt = SetValues();
中完成的设置不存在。我在做什么错了?
答案 0 :(得分:1)
在这种情况下,我认为使用内置选项模式不是必需的。
此代码没有利用它的好处(例如,从appsettings中读取设置)。
您可以将MyOptions实例注册为Singleton而不使用IOptions包装器(如下所示)。
services.AddSingleton(opt);
使用此功能的更好方法是将设置中的选项放入 appsetting.json 。