Simple Injector で依存性注入を学習しようとしているので、簡単なプログラムを作成しました。たくさんの例を調べましたが、これに似たものは見つかりませんでした。Ninjectにも同様の例があり、実装をそれ自体に自己バインドします
Bind<Samurai>().ToSelf();
しかし、単純なインジェクターで自己バインディングの例は見つかりませんでした。現状では、プログラムは正常に動作し、期待どおりの結果が得られますが、それは正しい方法ですか? プログラムは最後のコード サンプルです。
インターフェース
public interface ICar
{
void Move(string direction, int distance);
void Stop();
}
クラス
public class Driver
{
private readonly ICar _car = null;
public Driver(ICar car)
{
this._car = car;
}
public void Drive(string direction, int distance)
{
_car.Move(direction, distance);
}
public void Brake()
{
_car.Stop();
}
}
実装
public class Ferrari : ICar
{
public void Move(string direction, int distance)
{
Console.WriteLine("I am driving {0} really fast for {1} miles", direction, distance);
}
public void Stop()
{
Console.WriteLine("I am slamming on the brakes because I'm going too fast");
}
}
public class Lexus : ICar
{
public void Move(string direction, int distance)
{
Console.WriteLine("I am driving {0} for {1} miles", direction, distance);
}
public void Stop()
{
Console.WriteLine("I am applying the brakes");
}
}
プログラム
class Program
{
static void Main(string[] args)
{
var container = new Container();
container.Options.AllowOverridingRegistrations = true;
container.Register<ICar, Lexus>();
container.Register<ICar, Ferrari>();
container.Verify();
var johnDoeLexus = new Driver(container.GetInstance<Lexus>());
johnDoeLexus.Drive("North", 10);
johnDoeLexus.Brake();
var johnDoeFerrari = new Driver(container.GetInstance<Ferrari>());
johnDoeFerrari.Drive("North", 10);
johnDoeFerrari.Brake();
Console.ReadLine();
}
}