如何获得实现相同接口的所有类

本文关键字:接口 何获得 实现 | 更新日期: 2023-09-27 17:49:19

我有一个设计问题。我想为每个验证都有单独的类。另外,我想要一个类调用所有这些验证。想法是,如果我需要新的验证,那么我只需要添加新的验证类,一切都可以工作。我不需要改变任何东西,只需要添加新的类。像这样:

    public interface IValidate{
        bool Validate();
    }
    public class Validator1 : IValidate{    
        public bool Validate(){     
            //Do validation 1
        }
    }
    public class Validator2 : IValidate{    
        public bool Validate(){     
            //Do validation 2
        }
    }
    //...
    public class ValidatorN : IValidate{    
        public bool Validate(){     
            //Do validation N
        }
    }
    //...................................
    public interface IValAll{
        bool Validate_All();
    }
    public class ValidateAll : IValAll{
        public bool Validate_All(){     
             //Call all validators that implements IValidate interface
            //Do validation 1,2...N
            //If all validations return true, than this function return true. 
            //Else return false.
        }
    }

我不知道这是不是最好的方法,但是你知道我想要什么。问题是,我不知道如何实现这个Validate_All()方法。

如何获得实现相同接口的所有类并在一个循环中进行验证?

的想法是注入这个IValAll接口和做所有的验证与一个调用。另外,如果你认为我的设计不好,请随时告诉我。如果有人有更好的主意,我可以改变方法。

如何获得实现相同接口的所有类

您可以通过构造函数注入将所有实现IValidate的类注入到负责验证它们的类中:

public class UltimateValidator
{
    private IValidate[] validators
    public UltimateValidator(IValidate[] validators)
    {
         this.validators = validators;
    }
    public bool ValidateAll()
    {
          foreach (var validator in validators)
          {
                 if (validator.Validate())
                 {
                      // etc.
                 }
          }
    }
}