-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathValidateIfAttribute.cs
32 lines (28 loc) · 1.24 KB
/
ValidateIfAttribute.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NHail.ComponentModel.DataAnnotations.Fluent
{
public class ValidateIfAttribute : ValidationAttribute
{
private readonly IDictionary<string, Func<object, object>> _properties;
private readonly ValidationAttribute _validation;
public ValidateIfAttribute(IDictionary<string, Func<object, object>> properties, ValidationAttribute validation)
{
_properties = properties;
_validation = validation;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var valid = _properties.All(p => Validator.TryValidateProperty(p.Value(validationContext.ObjectInstance),
new ValidationContext(validationContext.ObjectInstance, validationContext.ServiceContainer,
validationContext.Items)
{MemberName = p.Key}, null));
return valid ? _validation.GetValidationResult(value, validationContext) : ValidationResult.Success;
}
public override bool RequiresValidationContext => true;
}
}