私はついに依存性注入に足を踏み入れています(長い間遅れていました)。Unity を使い始めて、戦略パターンの問題に遭遇しました。コンテナーを使用して、名前に基づいて戦略の特定の実装を返すことができますが、コンテキストで適切な戦略を取得する方法がわかりません。
簡単な例で説明しましょう。コンテキストは車で、IEngine (戦略) があり、FastEngine と SlowEngine の 2 つの実装があります。コードは次の行に沿って表示されます。
public interface IEngine
{
double MaxSpeed
{
get;
}
}
internal class FastEngine:IEngine
{
public double MaxSpeed
{
get
{
return 100d;
}
}
}
internal class SlowEngine:IEngine
{
public double MaxSpeed
{
get
{
return 10d;
}
}
}
public class Car
{
private IEngine engine;
public double MaximumSpeed
{
get
{
return this.engine.MaxSpeed;
}
}
public Car(IEngine engine)
{
this.engine = engine;
}
}
私の問題は次のとおりです。速い車または遅い車をインスタンス化するにはどうすればよいですか? コンテナを使用して各実装を提供し、使用する「デフォルト」実装を設定できます。
IUnityContainer container = new UnityContainer();
container.RegisterType<IEngine, FastEngine>();
container.RegisterType<IEngine, FastEngine>("Fast");
container.RegisterType<IEngine, SlowEngine>( "Slow" );
var car = container.Resolve<Car>();
Assert.AreEqual(100, car.MaximumSpeed);
しかし、私が望むのは、戦略の特定の実装を備えた車をリクエストできることです-次のようなものです
var car = container.Resolve<Car>(??? use "Fast" or "Slow ???);
コンテナを使用してそれを行うことはできますか? または、コンテナーを使用する Factory を作成する必要がありますか? 任意のガイダンスをいただければ幸いです-これについて正しく考えているかどうかはわかりません!