gpt4 book ai didi

c# - 属性的自定义配置绑定(bind)器

转载 作者:行者123 更新时间:2023-12-01 19:28:24 27 4
gpt4 key购买 nike

我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示:

services.AddSingleton(Configuration.GetSection("SettingsSection").Get<SettingsClass>());

问题在于我的类作为 int 属性,通常绑定(bind)到配置文件中的 int 值,但也可以绑定(bind)到字符串“disabled”。在幕后,如果该属性绑定(bind)到字符串“disabled”,我希望该属性获得值 -1。

它可能比这更复杂,但为了简洁起见,我进行了简化。

我的问题是这样的:我如何提供一个自定义绑定(bind)器/转换器来覆盖SettingsClass中特定属性的配置绑定(bind),以便在进行字符串转换时它将“disabled”转换为-1,而不是抛出“disabled”无法转换为 Int32 的异常?

最佳答案

看来,由于 ConfigurationBinder 使用类型的 TypeDescriptor 来获取转换器,因此我要做的唯一方法就是实现自定义类型转换器并将其插入到类 I' 的 TypeDescriptor 中m 转换为(在本例中为 Int32)。

因此,基本上,在配置发生之前添加此内容:

TypeDescriptor.AddAttributes(typeof(int), new TypeConverterAttribute(typeof(MyCustomIntConverter)));

MyCustomIntConverter 看起来像这样:

public class MyCustomIntConverter  : Int32Converter
{
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value != null && value is string)
{
string stringValue = value as string;
if(stringValue == "disabled")
{
return -1;
}
}
return base.ConvertFrom(context, culture, value);
}
}

似乎有点矫枉过正,因为现在应用程序中任何地方的 Int32“禁用”都将始终转换为 -1。如果有人知道一种侵入性较小的方法来做到这一点,请告诉我。

关于c# - 属性的自定义配置绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com