public void AddConverter(Type targetType, IKeyValueConverter converter) { if (targetType == null) { throw new ArgumentNullException(nameof(targetType)); } if (converter == null) { throw new ArgumentNullException(nameof(converter)); } if (_convertersBuilder.ContainsKey(targetType)) { throw new ArgumentException($"Type {targetType.FullName} already has a keyvalue converter", nameof(targetType)); } _convertersBuilder.Add(targetType, converter); }
public void AddConvertersFromAssembly(Assembly assembly) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } //Allow redundant additions (if client and server add the same assemblies) if (_referencedAssemblies.Contains(assembly)) { return; } _referencedAssemblies.Add(assembly); foreach (var type in assembly.DefinedTypes.Where(t => typeof(IKeyValueConverter).IsAssignableFrom(t) && t.IsPublic)) { IKeyValueConverter converter = null; foreach (var attr in type.GetCustomAttributes <KeyValueConverterAttribute>()) { if (attr.Type == null) { throw new ArgumentException(nameof(KeyValueConverterAttribute) + " " + nameof(KeyValueConverterAttribute.Type) + " must be non-null"); } if (_convertersBuilder.ContainsKey(attr.Type)) { throw new ArgumentException($"Type {attr.Type.FullName} already has a keyvalue converter"); } //Create one instance for N type conversions if (converter == null) { converter = (IKeyValueConverter)Activator.CreateInstance(type); } _convertersBuilder.Add(attr.Type, converter); } } }
public void AddKeyValueConverter(Type targetType, IKeyValueConverter converter) => _keyValueConverters.AddConverter(targetType, converter);
public KeyValueMetaData(MemberInfo member, Type memberType, IKeyValueConverter converter) { Member = member ?? throw new ArgumentNullException(nameof(member)); MemberType = memberType ?? throw new ArgumentNullException(nameof(memberType)); Converter = converter ?? throw new ArgumentNullException(nameof(converter)); }