namespace Sopaco.Lib.Validate.ModelValidate
{
public class ValidateTypeDictionary : IValidateTypeDictionary
{
#region Fields
public static readonly IValidateTypeDictionary Instance;
#endregion
#region Constructors & Initializer
static ValidateTypeDictionary()
{
Instance = new ValidateTypeDictionary();
}
private ValidateTypeDictionary()
{
}
#endregion
#region IValidateTypeDictionary 成员
public IValidateTypeDictionary RegisterType<TModel>()//注册到类型字典中
{
if (Validator<TModel>.Instance == null)
Validator<TModel>.Instance = new Validator<TModel>();
return this;
}
public bool Validate<TModel>(TModel model)
{
var validator = ResolveValidator<TModel>();
if(validator == null)
{
throw new NonValidatorException();
}
return validator.ValidateModel(model);
}
public IValidator<TModel> ResolveValidator<TModel>()
{
return Validator<TModel>.Instance;
}
#endregion
}
}
namespace Sopaco.Lib.Validate.ModelValidate
{
public class Validator<TModel> : IValidator<TModel>
{
#region Fields
internal IList<Func<TModel, bool>> _validateRules;
internal static Validator<TModel> Instance;
#endregion
#region Constructors & Initializer
public Validator()
{
Init();
}
private void Init()
{
//_validateRules = Enumerable.Empty<Func<TModel, bool>>();
_validateRules = new List<Func<TModel, bool>>();
}
#endregion
#region IValidator<TModel> 成员
public IValidator<TModel> Setup(Func<TModel, bool> rule)
{
_validateRules.Add(rule);;
return this;
}
public bool ValidateModel(TModel model)
{
return _validateRules.Aggregate(
true,
(prev, f) => f.Invoke(model)
);
}
public void ResetValidator()
{
_validateRules.Clear();
}
#endregion
}
}