Я пытаюсь выполнить контекстную привязку, но не могу связать конкретный интерфейс реализации в качестве аргумента конструктора. Ninject версия: 3.2.0.0Связать интерфейс с несколькими конкретными реализациями с аргументом конструктора
Моя структура выглядит следующим образом:
INotifier 1. XNotifier 2. YNotifier
IPublisher 1. APublisher 2. BPublisher
где, как XNotifier и YNotifier принимает аргумент конструктора типа IPublisher.
Вот связывании у меня есть:
Bind<INotifier>()
.To<XNotifier>()
.When(x => notifictionControl.ToLower() == "xnotification")
.WithConstructorArgument("Publisher",ctx=>Kernel.Get<IPublisher>());
Bind<INotifier>()
.To<YNotifier>()
.When(x => notifictionControl.ToLower() == "ynotification")
.WithConstructorArgument("Publisher", ctx => Kernel.Get<IPublisher>());
Использование:
IParameter parameter = new ConstructorArgument("Publisher", publisher);
var notifier = kernel.Get<INotifier>(parameter);
Но получить следующие ошибки:
Ошибка активирующего INotifier Нет соответствующих привязок не доступны, и тип не является самопереключаемым.
Почему вы передаете параметр в '' Получить? –
MaKCbIMKo
@MaKCbIMKo: Конструктор класса, который реализует INotifier, ожидает конкретной реализации IPublisher. – AnandSonake
Но вы уже указали аргумент конструктора в своих привязках. Почему вы снова это делаете? – MaKCbIMKo