NinjectContextualBindingを理解しようとしています。設計時に自分のコンテキストを知っているシナリオを理解しています。たとえば、名前付き属性を使用して、テストクラスで使用する場合はDBオブジェクトをモックDBにバインドし、実際のコードから使用する場合はSQLDBにバインドできることを理解しています。
ただし、実行時にコンテキストバインディングを処理する方法がわかりません。たとえば、私がショッピングセンター用のソフトウェアを書いているとしましょう。店主は、請求にキーボードまたはバーコードスキャナーを使用できます。事前にどちらを使うのかわかりません。そして彼は将来、RFIDのような他のスキャン方法を追加するかもしれません。
だから私は次のことをしています:
interface IInputDevice
{
public void PerformInput();
}
class KeyboardInput : IInputDevice
{
public void PerformInput()
{
Console.Writeline("Keyboard");
}
}
class BarcodeInput : IInputDevice
{
public void PerformInput()
{
Console.Writeline("Barcode");
}
}
class Program
{
static void Main()
{
IKernel kernel = new StandardKernel(new TestModule());
var inputDevice = kernel.Get<IInputDevice>();
inputDevice.PerformInput();
Console.ReadLine();
}
}
public class TestModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
Bind<IInputDevice>().To<....>();
}
}
では、どうすれば最小限のカスタムコードでそれを実行できますか?コンテキストバインディングに関する記事/ウィキ/チュートリアルへのリンクではなく、特定のコード例をリクエストしたいと思います。