如何获取所有实现相同接口的类?
How to get all classes that implement same interface?
我有一个设计问题。我希望每个验证都有单独的 class。另外,我想要一个 class 来调用所有这些验证。我的想法是,如果我需要新的验证,那么我只需添加新的验证 class 就可以了。我不需要更改任何其他内容,只需添加新的 class。
像这样:
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() 方法。
如何在一个循环中获取所有实现相同接口的class并进行验证?
想法是注入这个 IValAll 接口并通过一次调用完成所有验证。
另外,如果您认为我的设计不好,请随时告诉我。如果有人有更好的主意,我可以改变方法。
您可以将通过 constructor injection 实现 IValidate
的所有 class 注入到负责验证它们的 class 中:
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.
}
}
}
}
我有一个设计问题。我希望每个验证都有单独的 class。另外,我想要一个 class 来调用所有这些验证。我的想法是,如果我需要新的验证,那么我只需添加新的验证 class 就可以了。我不需要更改任何其他内容,只需添加新的 class。 像这样:
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() 方法。
如何在一个循环中获取所有实现相同接口的class并进行验证?
想法是注入这个 IValAll 接口并通过一次调用完成所有验证。 另外,如果您认为我的设计不好,请随时告诉我。如果有人有更好的主意,我可以改变方法。
您可以将通过 constructor injection 实现 IValidate
的所有 class 注入到负责验证它们的 class 中:
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.
}
}
}
}