也许这很容易,但是在互联网上搜索它已经让我很头疼
这是问题所在:
interface IValidator
{
void Validate(object obj);
}
public class ValidatorA : IValidator
{
public void Validate(object obj) { }
}
public class ValidatorB : IValidator
{
public void Validate(object obj) { }
}
interface IClassA { }
interface IClassB { }
public class MyBaseClass
{
protected IValidator validator;
public void Validate()
{
validator.Validate(this);
}
}
public class ClassA : MyBaseClass, IClassA
{
//problem: validator should ValidatorA
public ClassA(IValidator validator) { }
}
public class ClassB : MyBaseClass, IClassB
{
//problem: validator should ValidatorB
public ClassB(IValidator validator) { }
}
public class OtherClass
{
public OtherClass(IClassA a, IClassB b) { }
}
//on Main
var oc = container.Resolve<OtherClass>();
任何的想法?
编辑
我注册了ValidatorA
and ValidatorB
,Named
现在问题是 Castle Windsor 如何将这些验证器正确地注入到ClassA
and ClassB
,有没有办法做到这一点?还是有更好的解决方案?
如果有人认为我的课程设计是错误的,我愿意提供任何建议。到目前为止,我认为它是正确的。是的,验证器具有特定类的特定配置。但它被抽象是有原因的:
- Validator 是一个复杂的对象,有时应该连接到数据库,所以出于单元测试的原因,我必须将接口而不是实现传递给构造函数。
- 无法为任何验证器使用不同的接口,因为我使用的唯一方法是
Validate
- 我认为
MyBaseClass.Validate()
一个常见的模板方法模式不是吗?