Как добавить пользовательское преобразование типов для конфигурацииC#

Место общения программистов C#
Ответить
Anonymous
 Как добавить пользовательское преобразование типов для конфигурации

Сообщение Anonymous »

У меня есть файл toml для конфигурации, в нескольких разделах которого содержатся выражения Crontab, которые я хочу автоматически анализировать, а не фиксировать как строку и затем анализировать.

Код: Выделить всё

public record TestConfig(NCrontab.CrontabSchedule Schedule);

_builder.ConfigureAppConfiguration(options =>
{
options.AddTomlFile("Config.toml");
options.AddTomlFile("Config.Develop.toml");
});

_builder.ConfigureServices((ctx, services) =>
{
var test = ctx.Configuration.GetSection(nameof(TestConfig)).Get() ?? throw new Exception();
}
Я пробовал использовать собственный преобразователь типов, но, похоже, он не выбирает ожидаемый тип, поэтому все строковые значения проходят через этот преобразователь, поэтому значения, которые не являются crontab, просто преобразоваться в ноль

Код: Выделить всё

public class CronTabConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
{
return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
}

public override object? ConvertFrom(ITypeDescriptorContext? context, System.Globalization.CultureInfo? culture, object value)
{
if(value is null)
{
return null;
}

if (value is string strValue)
{
return CrontabSchedule.TryParse(strValue);
}

return base.ConvertFrom(context, culture, value);
}

public static void RegisterTypeConverter()
{
TypeDescriptor.AddAttributes(typeof(string), new TypeConverterAttribute(typeof(CronTabConverter)));
}
}
Я вижу, что это возможно с помощью JsonConverters, но я не знаю, как зарегистрировать пользовательский конвертер для AddJsonFile.
Я не против переключения файла конфигурации на Json, если это можно сделать таким образом.


Подробнее здесь: https://stackoverflow.com/questions/791 ... figruation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»