Я пытаюсь понять Ninject Contextual Binding.Я понимаю сценарии, в которых я знаю свой контекст во время разработки.например, я понимаю, что могу использовать именованные атрибуты, чтобы связать объект БД с фиктивной БД, когда я хочу использовать его в тестовом классе, и с БД SQL, когда я использую его из своего реального кода.
Однако я не знаю, как обрабатывать контекстную привязку во время выполнения.Например, допустим, я пишу программное обеспечение для торгового центра.Продавец может использовать клавиатуру для выставления счетов или сканер штрих-кода.Я не знаю, какой он будет использовать заранее.И он может добавить другие способы сканирования, такие как 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<....>();
}
}
Итак, как я могу сделать это с наименьшим количеством пользовательского кода?Я хотел бы запросить конкретные примеры кода, а не ссылки на статьи / вики / руководства по контекстному связыванию.