- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 .Net Core 控制台应用程序中使类型化配置可刷新时遇到问题。
应用程序将从配置中加载类型化对象...
{
"LibrarySettings": {
"SettingA": "ValueA",
"SettingB": "ValueB"
}
}
... 并将它们作为 IOption<SomeLibrarySettings>
传递给图书馆
public class LibrarySettings
{
public string SettingA { get; set; }
public string SettingB { get; set; }
}
public class BusinessLogic
{
private IOptions<LibrarySettings> _settings;
public BusinessLogic(IOptions<LibrarySettings> settings)
{
_settings = settings;
}
public string GetValueA => _settings.Value.SettingA;
public string GetValueB => _settings.Value.SettingB;
}
在运行时,如果我改变 appsettings.json
我会期待底层 IOptions
相应地更新值的实例。
public class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true);
var configuration = builder.Build();
LibrarySettings settings = new LibrarySettings();
configuration.Bind("LibrarySettings", settings);
BusinessLogic logic = new BusinessLogic(Options.Create(settings));
while (true)
{
configuration.Reload();
Console.WriteLine();
Console.WriteLine(logic.GetValueA);
Console.WriteLine(logic.GetValueB);
Console.ReadLine();
}
}
}
不幸的是,情况并非如此。当我启动此代码并更改复制的值时 appsettings.json
应用程序中的值不会重新加载。
我做错了什么?
最佳答案
使用IOptionsSnapshot
代替IOptions
public class BusinessLogic
{
private IOptionsSnapshot<LibrarySettings> _settings;
public BusinessLogic(IOptionsSnapshot<LibrarySettings> settings)
{
_settings = settings;
}
public string GetValueA => _settings.Value.SettingA;
public string GetValueB => _settings.Value.SettingB;
}
引用 Options patterns in ASP.NET Core
编辑:为避免常见错误('T' 必须是具有公共(public)无参数构造函数的非抽象类型
)
public class LibrarySettings
{
public string SettingA { get; set; }
public string SettingB { get; set; }
public LibrarySettings() {}
}
开始工作了:
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true);
var configuration = builder.Build();
var settings = new LibrarySettings();
configuration.GetSection("LibrarySettings").Bind(settings);
var x = settings.SettingA;
}
}
public class BusinessLogic
{
private LibrarySettings _settings;
public BusinessLogic(IOptionsSnapshot<LibrarySettings> settings)
{
_settings = settings.Value;
}
public string GetValueA => _settings.SettingA;
public string GetValueB => _settings.SettingB;
}
public class LibrarySettings
{
public string SettingA { get; set; }
public string SettingB { get; set; }
public LibrarySettings() { }
}
关于c# - 在没有 DI 的控制台应用程序中将 IConfigurationSection 与可刷新配置绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053322/
使用 MVC .net Core 并在启动类中构建一个具体的配置类。我的 appsettings.json 看起来像这样: { "myconfig": { "other2": "teste
我创建了 JwtHelper 类。我已经使用它很长时间了。但是,当我更新软件包时,以下行出现错误; 完整的错误信息如下; Severity Code Description Project File
选项模式允许我创建包含配置值的选项对象,如下所述:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/op
我有以下基于 Json 的配置文件: { "PostProcessing": { "ValidationHandlerConfiguration": { "MinimumTru
我查看了 StackOverflow 上发布的各种解决方案——许多都已过时。目的是使用 IConfigurationSection.Get 通过 JsonConfigurationExtensions
我有 .netcore 3.1应用程序,我想将其更新为 .net 5.0我有以下代码 public static IAppSettings ConfigureAppSettings(this ISer
这是我关于该主题的第二个问题。我的第一个问题是 here .Roman Marusyk 为这个问题提供了一个简单的答案。然而,我在现实中有更困难的案例,它会变得更加复杂。因此,我需要使用 AutoMa
在我的 appSettings.json 中,我有一个配置部分,只要它是 json 有效的,它就可以包含任何内容。它通常是一组键/值(字符串/字符串) 我想在我的代码中获取它并在 Controller
我在 .Net Core 控制台应用程序中使类型化配置可刷新时遇到问题。 应用程序将从配置中加载类型化对象... { "LibrarySettings": { "Setting
我的 Program.cs 中有以下代码: var configuration = new ConfigurationBuilder() .SetBasePath(Di
我有一个 .NET Core 控制台应用程序,想要读取 appsettings.json 并将一个部分解析为 List(没有依赖注入(inject)或 ASP.NET Core)。 我已经尝试过 Ho
我收到一个错误: 错误 CS1503 参数 2:无法从“Microsoft.Extensions.Configuration.IConfigurationSection”转换为“System.Acti
我是一名优秀的程序员,十分优秀!