1

私はこれを持っています:

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たが、うまくいきませんでした。

どうすればこれを解決できますか?

編集:また、追加する必要があります。クラスに属性を追加したくありません。

4

2 に答える 2