ComponentModelConverter
Attempts to utilize an existing TypeConverter for conversion
using Castle.Core.Configuration;
using System;
using System.ComponentModel;
using System.Reflection;
namespace Castle.MicroKernel.SubSystems.Conversion
{
[Serializable]
public class ComponentModelConverter : AbstractTypeConverter
{
public override bool CanHandleType(Type type)
{
if (type.GetTypeInfo().IsInterface)
return false;
return TypeDescriptor.GetConverter(type)?.CanConvertFrom(typeof(string)) ?? false;
}
public override object PerformConversion(string value, Type targetType)
{
TypeConverter converter = TypeDescriptor.GetConverter(targetType);
try {
return converter.ConvertFrom(value);
} catch (Exception innerException) {
throw new ConverterException($"""{value}""{targetType.FullName}", innerException);
}
}
public override object PerformConversion(IConfiguration configuration, Type targetType)
{
return PerformConversion(configuration.get_Value(), targetType);
}
}
}