public XMLCustomConverterAttribute(Type converterType) { if (typeof(IXMLValueConverter).IsAssignableFrom(converterType)) { _converter = (IXMLValueConverter)Activator.CreateInstance(converterType); } else { throw new ArgumentException("Converter must implement IXMLValueConverter interface."); } }
/// <summary> /// Проверяет наличие у поля атрибута XMLCustomConverterAttribute и добавляет его значение в словарь конвертеров. /// </summary> private void CheckCustomConverter(FieldInfo field) { Attribute[] attributes = Attribute.GetCustomAttributes(field); foreach (Attribute attribute in attributes) { if (attribute.GetType().SameType(typeof(XMLCustomConverterAttribute))) { IXMLValueConverter converter = (attribute as XMLCustomConverterAttribute).Converter; if (_converters.ContainsKey(converter.TargetType)) { _converters.Remove(converter.TargetType); } _converters.Add(converter.TargetType, converter.ConvertBack); } } }
/// <summary> /// Проверяет наличие у поля атрибута XMLCustomConverterAttribute и добавляет его значение в словарь конвертеров. /// </summary> private void CheckCustomConverter(FieldInfo field) { Attribute[] attributes = Attribute.GetCustomAttributes(field); foreach (Attribute attribute in attributes) { if (attribute.GetType().SameType(typeof(XMLCustomConverterAttribute))) { IXMLValueConverter converter = (attribute as XMLCustomConverterAttribute).Converter; //Кто придумает, как проверять конвертеры на соответствие и лишний раз не удалять/добавлять одинаковые, может взять с полки пирожок. if (_converters.ContainsKey(converter.TargetType)) { _converters.Remove(converter.TargetType); } _converters.Add(converter.TargetType, converter.Convert); } } }