Search code examples
c#typeconverter

Can you assign a TypeConverter without a TypeConverterAttribute?


Dependency requirements are forcing me to have a class and its TypeConverter in different assemblies.

Is there a way to assign a TypeConverter to a class without using a TypeConverterAttribute, and thus causing circular assembly references.

Thanks.


Solution

  • Hmm, not sure I've seen this before, but you could add the TypeConverterAttribute at runtime using a TypeDescriptor, so given my sample classes:

    public class MyType
    {
        public string Name;
    }
    
    public class MyTypeConverter : TypeConverter
    {
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            if (sourceType == typeof(string))
                return true;
    
            return base.CanConvertFrom(context, sourceType);
        }
    
        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value.GetType() == typeof(string))
                return new MyType() { Name = (string) value };
    
            return base.ConvertFrom(context, culture, value);
        }
    }
    

    I could then have a method:

    public void AssignTypeConverter<IType, IConverterType>()
    {
      TypeDescriptor.AddAttributes(typeof(IType), new TypeConverterAttribute(typeof(IConverterType)));
    }
    
    AssignTypeConverter<MyType, MyTypeConverter>();
    

    Hope that helps.