戦略設計パターンを使用する必要があるクラスがあります。実行時に、さまざまなアルゴリズムを切り替えて、アプリケーションのパフォーマンスへの影響を確認する必要があります。
問題のクラスは現在、コンストラクターで 4 つのパラメーターを取り、それぞれがアルゴリズムを表しています。
Ninject (または一般化されたアプローチ) を使用して IOC を使用しながら戦略パターンを使用するにはどうすればよいですか?
現在の制限は、カーネル (コンテナー) が各アルゴリズム インターフェイスを認識していることですが、それは 1 つの具体的なクラスにしかバインドできないということです。現時点でこれを回避する唯一の方法は、構築時に 8 つのアルゴリズムすべてを渡すことですが、異なるインターフェイスを使用しますが、これはまったく必要ないようです。IOC コンテナーを使用していなければ、これを行うことはないので、何らかの方法でこれを回避する必要があります。
コード例:
class MyModule : NinjectModule
{
public override void Load()
{
Bind<Person>().ToSelf();
Bind<IAlgorithm>().To<TestAlgorithm>();
Bind<IAlgorithm>().To<ProductionAlgorithm>();
}
}
実行時に切り替えることができるように、人は両方のアルゴリズムを利用する必要があります。ただし、TestAlgorithm はコンテナー内の最初のものであるため、バインドされているのは TestAlgorithm だけです。