Лучший способ проверки значений параметров методов WCF и WebService

Я собираюсь написать компонент проверки, чтобы использовать его в разных проектах. Я не знаком ни с одной из сред проверки, таких как 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 ))?

Заранее спасибо

5
задан Ashkan 4 August 2012 в 09:40
поделиться