私はこれを持っています:
interface IValidator
{
bool InputOK(Text);
}
class ValidatorChain : IValidator
{
ValidatorChain(IEnumerable<IValidator> other_validators_in_order) {...}
bool InputOK(Text) { return other_validators_in_order.All(v=>v.InputOK(Text)); }
}
ConcreteValidator1 : IValidator {...}
ConcreteValidator2 : IValidator {...}
ConcreteValidator3 : IValidator {...}
これを ninject を使用してバインドしたいのですが、簡単です。
Bind<IValidator>.To<ConcreteValidator1>();
Bind<IValidator>.To<ConcreteValidator2>();
Bind<IValidator>.To<ConcreteValidator3>();
さて、問題は、チェーンを他の場所で使用し、そこにチェーンを注入したいということです。私が試したら
Bind<IValidator>.To<ConcreteValidator1>().WhenInjectedExactlyInto(typeof(ValidatorChain));
Bind<IValidator>.To<ConcreteValidator2>().WhenInjectedExactlyInto(typeof(ValidatorChain));
Bind<IValidator>.To<ConcreteValidator3>().WhenInjectedExactlyInto(typeof(ValidatorChain));
Bind<IValidator>.To<ValidatorChain>();
最初はうまくいくように見えますが、最後の行が原因で循環的な依存関係が発生します。最後のバインディングで何度か試みましWhen
たが、うまくいきませんでした。
どうすればこれを解決できますか?
編集:また、追加する必要があります。クラスに属性を追加したくありません。