Использование IExtenderProvider для предоставления свойства Type
Я пытаюсь добавить свойство Type для некоторых элементов управления в моем конструкторе WinForms. В идеале я хотел бы, чтобы они были сериализованы с использованием typeof(MyCompany.TheTypeIUsed) (а также способ сериализации BindingSource.DataSource).
Если оставить в стороне тот факт, что я не указал конструктор для типа, то получается, что если я добавлю IExtenderProvider, использующий тип, свойство не появится в сетке свойств. Если я использую int или string или любой другой тип, он работает нормально.
Это ошибка в реализации IExtenderProvider или требуются дополнительные атрибуты и т. Д.?
[ProvideProperty("CommandType", typeof (Control))]
public class TypeExtender : Component, IExtenderProvider
{
private readonly Dictionary<Control, Type> controlCommands;
public TypeExtender()
{
controlCommands = new Dictionary<Control, Type>();
}
#region impl
bool IExtenderProvider.CanExtend(object target)
{
var control = target as Control;
if (control == null)
{
return false;
}
return true;
}
[DefaultValue(null)]
public Type GetCommandType(Control obj)
{
if (obj == null)
{
Debug.Fail("Non Control provided to Type getter");
return null;
}
Type commandType;
if (controlCommands.TryGetValue(obj, out commandType))
{
return commandType;
}
return null;
}
public void SetCommandType(Control obj, Type value)
{
if (obj == null)
{
Debug.Fail("Non control provided to Command Setter");
return;
}
if (value == null)
{
controlCommands.Remove(obj);
}
else
{
controlCommands[obj] = value;
}
}
[UsedImplicitly]
private bool ShouldSerializeCommand(object c)
{
var control = c as Control;
if (control == null)
{
return false;
}
Type type;
if (controlCommands.TryGetValue(control, out type))
{
return type != null;
}
return false;
}
[UsedImplicitly]
private void ResetCommand(object c)
{
if (c is Control)
{
controlCommands.Remove(c as Control);
}
}
#endregion
}