我有一个由两个类继承的接口,并实现其方法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));
这可能是问题吗?
答案 0 :(得分:0)
好的,你们是对的,问题是我向简单的注入器注册服务的方式。
这应该是这样的:
var myValidators = new List<Type>(){ typeof(ValidatorA), typeof(ValidatorB) };
container.RegisterCollection(typeof(IValidator), myValidators);
仅作简要说明。
没有错误的原因是,当我注册该应用时,该应用可以识别我的IValidator。它之所以没有从实现该接口的类中调用Validate方法,是因为这些类未在SimpleInjector中注册为子类。因此,不会显示任何错误,因为注册到SimpleInjector所需的唯一条件是父类(在此情况下为Interface)。