これは簡単かもしれませんが、インターネットで検索するだけで頭が痛くなります
ここに問題があります:
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
私はandValidatorB
を登録しましたがNamed
、Castle Windsor がこれらのバリデータをClassA
andClassB
に適切に注入する方法が問題になりました。それを行う方法はありますか? またはより良い解決策はありますか?
私のクラスの設計が間違っていると思う人がいたら、アドバイスをお待ちしています。これまでのところ、私はそれが正しいと思います。はい、バリデーターには特定のクラスの特定の構成があります。しかし、それが抽象化されている理由があります:
- バリデーターは複雑なオブジェクトであり、データベースに接続する必要がある場合があるため、単体テストの理由から、実装ではなくインターフェイスをコンストラクターに渡す必要があります。
- 私が使用した唯一の方法は
Validate
MyBaseClass.Validate()
よくあるテンプレートメソッドのパターンだと思いますよね?