代码///<summary>断言器,用于判断和抛出异常///</summary>staticclassAssertor
{///<summary>如果value值是null 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreNull(objectvalue,stringname)
{if(value ==null)
{thrownewArgumentNullException(name,"参数不能为null");
}
}///<summary>如果value字符串是null或string.Empty 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreNullOrEmpty(stringvalue,stringname)
{if(value ==null|| value.Length ==0)
{thrownewArgumentNullException(name,"字符串不能为null或空");
}
}///<summary>如果value字符串是 null、空还是仅由空白字符组成 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreNullOrWhiteSpace(stringvalue,stringname)
{if(string.IsNullOrWhiteSpace(value))
{thrownewArgumentNullException(name,"字符串不能为null或连续空白");
}
}///<summary>如果value集合是null或者Count是0 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreNullOrEmpty(ICollection value,stringname)
{if(value ==null|| value.Count ==0)
{thrownewArgumentNullException(name,"集合不能为null且必须有元素");
}
}///<summary>如果value值超过min~max 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>///<param name="min">最小值</param>///<param name="max">最大值</param>publicstaticvoidAreInRange<T>(T value,stringname, T min, T max)whereT : IComparable<T>{if(value.CompareTo(min) <0|| value.CompareTo(max) >0)
{thrownewArgumentOutOfRangeException(name, value,"值不能大于"+ max +"或小于"+min);
}
}///<summary>如果value值超过min~max 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>///<param name="min">最小值</param>///<param name="max">最大值</param>publicstaticvoidAreInRange<T>(IComparable value,stringname, T min, T max)whereT : IComparable
{if(value.CompareTo(min) <0|| value.CompareTo(max) >0)
{thrownewArgumentOutOfRangeException(name, value,"值不能大于"+ max +"或小于"+min);
}
}///<summary>如果value不是T类型或其子类 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreType<T>(objectvalue,stringname)
{if(valueisT ==false)
{thrownewArgumentOutOfRangeException(name, value +"值不是指定的类型 '"+typeof(T) +"'");
}
}///<summary>如果value不是Type类型或其子类 则抛出异常///</summary>///<param name="type">限定类型</param>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreType(Type type,objectvalue,stringname)
{if(type.IsInstanceOfType(value) ==false)
{thrownewArgumentOutOfRangeException(name, value +"值不是指定的类型 '"+ type +"'");
}
}///<summary>如果value不是数字类型 则抛出异常///</summary>///<param name="value">参数值</param>///<param name="name">参数名称</param>publicstaticvoidAreNumberType(objectvalue,stringname)
{varconv = valueasIConvertible;if(conv ==null)
{varcode = (int)conv.GetTypeCode();if(code <5|| code >15)
{thrownewArgumentOutOfRangeException(name, value +"不是数字类型");
}
}
}///<summary>如果condition是true 则抛出异常///</summary>///<param name="condition">判断条件</param>///<param name="message">异常消息</param>publicstaticvoidAreTrue<T>(boolcondition,stringmessage)whereT : Exception,new()
{if(condition)
{varex =newT();varlit = Literacy.Cache(typeof(Exception),false);
lit.Load.NonPublicField();
lit.Field["_message"].SetValue(ex, message);throwex;
}
}///<summary>如果condition是false 则抛出异常///</summary>///<param name="condition">判断条件</param>///<param name="message">异常消息</param>publicstaticvoidAreFalse<T>(boolcondition,stringmessage)whereT : Exception,new()
{
AreTrue<T>(!condition, message);
}///<summary>如果condition是true 则抛出NotSupportedException异常///</summary>///<param name="condition">判断条件</param>///<param name="message">异常消息</param>publicstaticvoidAreTrue(boolcondition,stringmessage)
{
AreTrue<NotSupportedException>(condition, message);
}///<summary>如果condition是false 则抛出NotSupportedException异常///</summary>///<param name="condition">判断条件</param>///<param name="message">异常消息</param>publicstaticvoidAreFalse(boolcondition,stringmessage)
{
AreTrue<NotSupportedException>(!condition, message);
}
}
View Code
调用PRivatestaticSimpleCache<IComponentFactory>GetFactoryCache()
{returnnewSimpleCache<IComponentFactory>(true, key =>{IComponentFactoryfactory;varprovider =_ProvideCache[key];if(provider ==DBProvider.Other)
{vartype =Type.GetType(key,false,false);Assertor.AreTrue<NotSupportedException>(type ==null,"没有找到名为"+ key +"的类型");
factory=Activator.CreateInstance(type)asIComponentFactory;Assertor.AreTrue<NotSupportedException>(factory ==null, type.FullName +"无法实例化或没有继承IComponentFactory");
}else{
factory=ComponentFactory.Create(provider);
}returnfactory;
});
}
CodeCSDNhttps://code.csdn.net/snippets/389206