添加为外部程序中的类型注册类型转换器的方法

This commit is contained in:
zengwenjie
2025-09-26 12:20:00 +08:00
parent 3f95883da6
commit d0bfabe9b0

View File

@@ -0,0 +1,49 @@
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
/*
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 注册外部类型的「TypeConverter」
TypeDescriptor.AddAttributes(typeof(ExternalPerson),
new TypeConverterAttribute(typeof(ExternalPersonConverter)));
}
}
*/
// 在目标程序集中定义类型时添加转换器
[TypeConverter(typeof(ExternalTypeConverter))]
public class ExternalType {
public ExternalType(string? value) { }
}
// 在主程序集中定义元数据类
[TypeConverter(typeof(ExternalTypeConverter))]
public class ExternalTypeMetadata { }
// 关联元数据与外部类型
[MetadataType(typeof(ExternalTypeMetadata))]
public partial class ExternalTypeProxy
{
// 通过代理类访问外部类型
[AllowNull]
public ExternalType Target { get; set; }
}
public class ExternalTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) => sourceType == typeof(string);
public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
{
return new ExternalType(value.ToString());
}
}