从接口实现的来自不同类的调用方法

时间:2019-06-15 02:27:16

标签: c# .net oop design-patterns simple-injector

我有一个由两个类继承的接口,并实现其方法Validate(此处无问题)。

public interface IValidator
{
   IEnumerable<ValidationError> Validate(MyModel model);
}

public class ValidatorA : IValidator
{
   public IEnumerable<ValidationError> Validate(MyModel model)
   {
       var list = new List<ValidationError>();

       //code to add items to list

       return list;
   }
}

public class ValidatorB : IValidator
{
   public IEnumerable<ValidationError> Validate(MyModel model)
   {
       var list = new List<ValidationError>();

       //code to add items to list

       return list;
   }
}

我要实现的是从接口调用该方法,并从继承该接口的类(ValidatorA,ValidatorB)调用所有方法。下面是我的操作方法,但未对子类造成影响。我在做什么错或正确的做法是什么?

//assuming this is inside a method of another class
//and injected inside
var validationErrors = _myInterfaceValidator.SelectMany(x => x.Validate(myModel));  //why is this not hitting validate from the child classes
return validationErrors.ToList();

好吧,也许在评论部分中的某些人是正确的,因为问题不可能在这里。 所以我猜它来自SimpleInjector,因为我注册了如下界面:

container.RegisterCollection(typeof(IValidator));

这可能是问题吗?

1 个答案:

答案 0 :(得分:0)

好的,你们是对的,问题是我向简单的注入器注册服务的方式。

这应该是这样的:

var myValidators = new List<Type>(){ typeof(ValidatorA), typeof(ValidatorB) };
container.RegisterCollection(typeof(IValidator), myValidators);

仅作简要说明。

没有错误的原因是,当我注册该应用时,该应用可以识别我的IValidator。它之所以没有从实现该接口的类中调用Validate方法,是因为这些类未在SimpleInjector中注册为子类。因此,不会显示任何错误,因为注册到SimpleInjector所需的唯一条件是父类(在此情况下为Interface)。