/// <summary> /// 合并指定的两个类型转换器提供者。 /// </summary> /// <param name="first">要合并的第一个类型转换器提供者。</param> /// <param name="second">要合并的第二个类型转换器提供者。</param> /// <returns>合并得到的类型转换器。</returns> public static IConverterProvider Combine(IConverterProvider first, IConverterProvider second) { Contract.Requires(first != null && second != null); Contract.Requires(first.OriginType != null && first.OriginType == second.OriginType); ConverterProvider firstProvider = first as ConverterProvider; ConverterProvider secondProvider = second as ConverterProvider; if (firstProvider != null) { if (secondProvider != null) { firstProvider.CombineWith(secondProvider); } else { firstProvider.CombineWith(second); } return(firstProvider); } if (secondProvider != null) { secondProvider.CombineWith(first); return(secondProvider); } return(new ConverterProvider(first, second)); }
/// <summary> /// 将当前类型转换器提供者与指定的 <see cref="ConverterProvider"/> 合并。 /// </summary> /// <param name="provider">要合并的类型转换器提供者。</param> private void CombineWith(ConverterProvider provider) { Contract.Requires(provider != null && OriginType == provider.OriginType); foreach (var pair in provider.fromDict) { fromDict.Add(pair.Key, pair.Value); } foreach (var pair in provider.toDict) { toDict.Add(pair.Key, pair.Value); } if (subProvider.Length == 0) { subProvider = provider.subProvider; } else if (provider.subProvider.Length > 0) { subProvider = ArrayExt.Combine(subProvider, provider.subProvider); } }
/// <summary> /// 将当前类型转换器提供者与指定的 <see cref="ConverterProvider"/> 合并。 /// </summary> /// <param name="provider">要合并的类型转换器提供者。</param> private void CombineWith(ConverterProvider provider) { Contract.Requires(provider != null && this.OriginType == provider.OriginType); foreach (KeyValuePair <Type, Delegate> pair in provider.fromDict) { this.fromDict.Add(pair.Key, pair.Value); } foreach (KeyValuePair <Type, Delegate> pair in provider.toDict) { this.toDict.Add(pair.Key, pair.Value); } if (this.subProvider.Length == 0) { this.subProvider = provider.subProvider; } else if (provider.subProvider.Length > 0) { this.subProvider = ArrayExt.Combine(this.subProvider, provider.subProvider); } }
/// <summary> /// 添加指定的类型转换器提供者。 /// </summary> /// <param name="provider">要添加的类型转换器提供者。</param> public static void AddConverterProvider(IConverterProvider provider) { Contract.Requires(provider != null && provider.OriginType != null); providers.AddOrUpdate(provider.OriginType, provider, (type, old) => ConverterProvider.Combine(old, provider)); }
/// <summary> /// 将当前类型转换器提供者与指定的 <see cref="ConverterProvider"/> 合并。 /// </summary> /// <param name="provider">要合并的类型转换器提供者。</param> private void CombineWith(ConverterProvider provider) { Contract.Requires(provider != null && this.OriginType == provider.OriginType); foreach (KeyValuePair<Type, Delegate> pair in provider.fromDict) { this.fromDict.Add(pair.Key, pair.Value); } foreach (KeyValuePair<Type, Delegate> pair in provider.toDict) { this.toDict.Add(pair.Key, pair.Value); } if (this.subProvider.Length == 0) { this.subProvider = provider.subProvider; } else if (provider.subProvider.Length > 0) { this.subProvider = ArrayExt.Combine(this.subProvider, provider.subProvider); } }