基本上问题是我想在执行 BL 之前对从数据库 (EF) 获得的一些值执行验证。我目前在 ViewModel 的属性中使用 INotifyDataErrorInfo 和属性。我尝试使用自定义验证器(CustomValidation 属性)进行此验证:
private string unit;
[Required(AllowEmptyStrings = false, ErrorMessage = Constants.Error6)]
[RegularExpression(Constants.AlphabeticRegEx, ErrorMessage = Constants.Error10)]
[CustomValidation(typeof(ProductSelectionViewModel),"IsInRegisteredUnits")]
public string Unit
{
get { return unit; }
set
{
if (value == unit)
return;
unit = value;
RaisePropertyChanged(vm => vm.Unit);
UpdateUnitPrice(selectedProduct, unit);
}
}
但是负责执行此验证的方法必须是静态方法,因此在这种情况下,我无法访问我的存储库,因为它不是静态的。
public static ValidationResult IsInRegisteredUnits(object obj, ValidationContext context)
{
var productSelectionViewModel = (ProductSelectionViewModel)context.ObjectInstance;
if (!unitService.GetAllUnitsAbbreviation().Any(x=>x.Equals(productSelectionViewModel.Unit, StringComparison.CurrentCultureIgnoreCase)))
return new ValidationResult("La unidad ingresada no es válida", new List<string> { "Unit" });
return ValidationResult.Success;
}
我该如何解决这个问题(unitService.GetAllUnitsAbbreviation() 不能是静态方法,因为它使用存储库),也许我在磨损的地方执行这种验证(错误的设计),任何帮助将不胜感激:)