我正在尝试了解 Ninject 上下文绑定。我了解在设计时了解我的上下文的场景。例如,我知道当我想在测试类中使用它时,我可以使用命名属性将 DB 对象绑定到一个模拟 DB,当我从我的实际代码中使用它时,我可以使用它来绑定到一个 SQL DB。
但是,我不知道如何在运行时处理上下文绑定。例如,假设我正在为购物中心编写软件。店主可以使用键盘进行计费或使用条形码扫描仪。我不知道他会事先使用哪一个。他可能会在未来的某个时候添加其他扫描方式,例如 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<....>();
}
}
那么,我怎样才能用最少的自定义代码来实现呢?我想请求特定的代码示例,而不是指向有关上下文绑定的文章/wikis/教程的链接。