Чтобы иметь возможность использовать hex цвета в конфигурации, нам надо иметь возможность конвертировать строки в Colorf, собственно.
Из-за того, как работает чтение конфигурации в дотнете, мы не можем контролировать процесс десериализации json конфига в инстанс класса напрямую.
Чтение конфигурации в дотнете разбито на две части:
Использование провайдера для чтения конфига из произвольного источника в словарь ключ:значение.
Использование внутренних дотнент вещей для инстанциации классов конфигурации.
И если первую часть мы выбираем сами (в нашем случае через вызов метода .AddJsonFile()), то вторая не настолько гибка и единственный способ повлиять на то, как будут сопоставляться строковые ключи из вышеупомянутого словаря на поля классов конфигураций - использовать TypeConverter.
Для того чтобы разобраться как эта конвертация работает, мне пришлось вытащить исходники System.ComponentModel, подебажить и тогда я догадался, что конвертер надо вешать не на свойство с типом Colorf, а на сам тип ColorF. Дело тут в том, что код в дотнете смотрит на атрибуты типа а не на атрибуты свойства класса, на которое будет мапить значение.
Поэтому пришлось код атрибута и парсер перенести в g3.
Чтобы иметь возможность использовать hex цвета в конфигурации, нам надо иметь возможность конвертировать строки в Colorf, собственно.
Из-за того, как работает чтение конфигурации в дотнете, мы не можем контролировать процесс десериализации json конфига в инстанс класса напрямую.
Чтение конфигурации в дотнете разбито на две части:
И если первую часть мы выбираем сами (в нашем случае через вызов метода .AddJsonFile()), то вторая не настолько гибка и единственный способ повлиять на то, как будут сопоставляться строковые ключи из вышеупомянутого словаря на поля классов конфигураций - использовать TypeConverter.
Для того чтобы разобраться как эта конвертация работает, мне пришлось вытащить исходники System.ComponentModel, подебажить и тогда я догадался, что конвертер надо вешать не на свойство с типом Colorf, а на сам тип ColorF. Дело тут в том, что код в дотнете смотрит на атрибуты типа а не на атрибуты свойства класса, на которое будет мапить значение.
Поэтому пришлось код атрибута и парсер перенести в g3.
Если есть идеи получше - с удовольствием выслушаю