Example #1
0
        /// <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));
        }
Example #2
0
 /// <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);
     }
 }
Example #3
0
 /// <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);
     }
 }
Example #4
0
 /// <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));
 }
Example #5
0
 /// <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);
     }
 }