У меня есть код в NinjectModule, который устанавливает привязки Mock для всех интерфейсов в нескольких сборках. Ninject 2 позволил мне несколько раз вызывать методы From()
внутри лямбды Scan
:
Kernel.Scan(scanner =>
{
string first = "MyAssembly";
Assembly second = Assembly.Load("MyAssembly");
scanner.From(first);
scanner.From(second);
scanner.BindWith<MockBindingGenerator>();
});
Насколько я могу судить, новый способ в Ninject 3 не допускает связанных вызовов From()
. Это лучший эквивалент, который я мог придумать:
string first = "MyAssembly";
Assembly second = Assembly.Load("MyAssembly");
Kernel.Bind(x => x
.From(first)
.SelectAllInterfaces()
.BindWith<MockBindingGenerator>());
Kernel.Bind(x => x
.From(second)
.SelectAllInterfaces()
.BindWith<MockBindingGenerator>());
Мой новый код ломается*, когда одна сборка загружается несколько раз, как показано выше. Обратите внимание, что переменные first
и second
имеют разные типы, поэтому я не могу просто объединить их в один вызов. В моем реальном производственном коде та же проблема, но, конечно, я не просто дважды жестко запрограммирую одно и то же имя сборки.
Итак, как я могу переписать приведенное выше, чтобы я мог комбинировать несколько вызовов From()
и вызывать BindWith<>
только один раз?
Редактировать
* Сам код привязки выполняется просто отлично. Исключение возникает, когда я пытаюсь получить экземпляр интерфейса, существующего в сборке, которая была привязана дважды.