C# FluentValidation:默认情况下自动为所有属性应用规则
我有一个具有某些属性的类Person,因此我希望在默认情况下自动为所有属性应用FluentValidation规则C# FluentValidation:默认情况下自动为所有属性应用规则,c#,reflection,fluentvalidation,C#,Reflection,Fluentvalidation,我有一个具有某些属性的类Person,因此我希望在默认情况下自动为所有属性应用FluentValidation规则 例如: string:NotNull()、NotEmpty()、Length()… enum:IsInEnum() List:NotNull()或其他… 人员和扩展方法 public enum Gender { Male, Female } public class Person { public Gender Gender { get; set; }
- 例如:
string:NotNull()、NotEmpty()、Length()…
enum:IsInEnum()
List:NotNull()或其他…
public enum Gender { Male, Female }
public class Person
{
public Gender Gender { get; set; }
public string Name { get; set; }
public List<string> Notes { get; set; }
}
public static class Extension
{
public static Expression<Func<T, TProperty>> GenerateExpression<T, TProperty>(PropertyInfo propInfo)
{
ParameterExpression paramExp = Expression.Parameter(typeof(T));
MemberExpression memExp = Expression.Property(paramExp, propInfo);
UnaryExpression unaryExp = Expression.Convert(memExp, propInfo.PropertyType);
return Expression.Lambda<Func<T, TProperty>>(unaryExp, paramExp);
}
}
个人验证程序
public class PersonValidator : BaseValidator<Person> { }
公共类PersonValidator:BaseValidator{}
节目
public class Program
{
public static void Main(string[] args)
{
Person person = new Person
{
Name = "Name",
Gender = Gender.Male,
Notes = new List<string> { "Note 1", "Note 2" }
};
PersonValidator validation = new PersonValidator();
ValidationResult result = validation.Validate(person);
foreach (var error in result.Errors)
{
Console.WriteLine(error);
}
Console.ReadKey();
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
人=新人
{
Name=“Name”,
性别=性别。男性,
注释=新列表{“注释1”、“注释2”}
};
PersonValidator validation=新PersonValidator();
ValidationResult=验证。验证(人);
foreach(result.Errors中的变量错误)
{
控制台写入线(错误);
}
Console.ReadKey();
}
}
您可以尝试使用以下方法:
UnaryExpression unaryExp = Expression.Convert(memExp, typeof(TProperty));
而不是:
UnaryExpression unaryExp = Expression.Convert(memExp, propInfo.PropertyType);
它应该对泛型属性有帮助,但恐怕对枚举没有帮助
IsInEnum
方法必须知道枚举属性的实际类型,而不仅仅是enum
您可以尝试使用以下方法:
UnaryExpression unaryExp = Expression.Convert(memExp, typeof(TProperty));
而不是:
UnaryExpression unaryExp = Expression.Convert(memExp, propInfo.PropertyType);
它应该对泛型属性有帮助,但恐怕对枚举没有帮助IsInEnum
方法必须知道枚举属性的实际类型,而不仅仅是enum