Я собираюсь написать компонент проверки, чтобы использовать его в разных проектах. Я не знаком ни с одной из сред проверки, таких как Enterprise Library VAB , Fluent , CuttingEdge.Conditions и многими другими, однако у меня нет время поработать со всеми из них, чтобы увидеть, что лучше для моей цели.
Я хочу, чтобы этот компонент предоставлял мне 2 разные функции:
Во-первых , я хочу иметь несколько валидаторов, таких как EmailValidator, StringLengthValidator, MyCustomValidator и т. д., чтобы я мог использовать их в коде, когда захочу, как показано ниже:
public class EmailValidator : RegexValidator // or StringValidator or whatever!
{
public EmailValidator() : base("emailRegexHere")
{
}
public bool override DoValidate(string value)
{
return base.DoValidate(value);
}
}
...
public void MyMethod(string email)
{
EmailValidator validator = new EmailValidator();
if(!validator.Validate(email))
throw new NotValidatedException("email is invalid.");
...
}
Во-вторых , мне нужно проверить параметры, применяя что-то вроде DataAnnotations к любому параметру метода, который я хочу, без дополнительного кодирования. Один из возможных способов, который я знаю, — это писать Aspects с использованием PostSharp для вставки кода в то место, где начинается метод (OnMethodEntry ). Я сделал ведение журнала с Postsharp, и он отлично работает.
Также Microsoft представляет IParameterInspector для выполнения проверки ввода в WCF , который предоставляет 2 метода BeforCall и AfterCall, но я думаю, что это работает только для WCF.
В заключение мне нужно выполнить проверку в моем WCF или WebService следующим образом:
[System.Web.Script.Services.ScriptService]
public class MyServiceClass : System.Web.Services.WebService
{
[Aspects.Validate]
[WebMethod(EnableSession = true)]
public string SubmitComment([Validation.Required]string content,[Validation.Guid] string userId,[Validation.Required] [Validation.Name]string name, [Validation.Email]string email, string ipAddress)
{
...
}
}
Примечание:это всего лишь пример кода для демонстрации нужного мне поведения, любые другие предложения приветствуются. Также это хорошая идея, что Validation. *аннотации должны быть изменены на одну аннотацию, например ValidateParam (typeof (EmailValidator ))?
Заранее спасибо