序章:
Ninject Factory Extensionを使用して、単純なオブジェクトファクトリをサービスクラスに注入しています。
これが私のインターフェースとそれを実装する2つのクラスです:
public interface ICar
{
void Drive();
void Stop();
}
public class Mercedes : ICar
{
public void Drive()
{
Do mercedes drive stuff...
}
public void Stop()
{
Do mercedes stop stuff...
}
}
public class Ferrari : ICar
{
public void Drive()
{
Do ferrari drive stuff...
}
public void Stop()
{
Do ferrari stop stuff...
}
}
実行時に車を動的に作成するためのオブジェクトファクトリは次のとおりです。
public interface ICarFactory
{
ICar CreateCar(string carType);
}
public class CarFactory : ICarFactory
{
public ICar CreateCar(string carType)
{
ICar car;
switch (type)
{
case "mercedes":
car = new Mercedes();
break;
case "ferrari":
car = new Ferrari();
break;
}
return car;
}
}
次に、ninjectファクトリ拡張「ToFactory」メソッドを使用して、自動車ファクトリインターフェイスをバインドします。
public class CarModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<ICarFactory>().ToFactory();
}
}
問題:
私のファクトリは期待どおりにサービスクラスに注入され、車のオブジェクトを作成するために使用できますが、ICarを具体的なタイプに適切に解決できないため、ここでninjectが爆発します。Mercedes
またはファクトリメソッドFerrari
によって返されます。CreateCar()
public CarService(string carType, ICarFactory carFactory)
{
var car = carFactory.CreateCar(carType);
}
質問:
ここで使用しているファクトリパターンが、ninjectファクトリ拡張の動作と互換性があると仮定すると、実行時に動的に解決されるように、ICar-> Ferrari、ICar->Mercedesなどのバインディングを設定するにはどうすればよいですか。このアプローチ?
ありがとう!