Ninject 2.2 множественные привязки

Недавно я обновил приложение ASP.NET MVC 3 до версии Ninject 2.2.

Ранее у меня был следующий интерфейс для привязки реализации в моем основном приложении:

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();

Кроме того, у меня было следующее в другой сборке, которая загружалась моим основным приложением:

var arg = new ConstructorArgument("info", "something");
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg);

Ранее это работало нормально, и более конкретная реализация (с аргументом) была распознана. Однако, когда я обновился до Ninject 2.2, я получил следующую ошибку:

Error activating IMyInterface{MyClass}
More than one matching bindings are available.
Activation path:
 2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass
 1) Request for IMyInterface

Suggestions:
 1) Ensure that you have defined a binding for IMyInterface{MyClass} only once.

Какое изменение было внесено с 2.0 на 2.2, что вызывает это, и есть ли обходной путь?

1 ответ

Решение

Ninject 2.2 гарантирует, что при разрешении экземпляров существует только одна совпадающая привязка. 2.0 вернул экземпляр первой соответствующей привязки, игнорируя, что есть другие. Но наличие нескольких привязок, если запрашивается только одна, отражает плохую конфигурацию и может привести к трудностям при обнаружении непреднамеренного поведения.

Но я вижу, что должна быть возможность отменять открытые общие привязки с более конкретными. Я обязательно изучу его, и он будет добавлен в выпуск исправлений или в следующий основной выпуск.

Другие вопросы по тегам