2

基本上问题是我想在执行 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() 不能是静态方法,因为它使用存储库),也许我在磨损的地方执行这种验证(错误的设计),任何帮助将不胜感激:)

4

0 回答 0