我在 NinjectModule 中有一些代码,它为多个程序集中的所有接口设置 Mock 绑定。Ninject 2 允许我在lambda中From()
多次调用这些方法:Scan
Kernel.Scan(scanner =>
{
string first = "MyAssembly";
Assembly second = Assembly.Load("MyAssembly");
scanner.From(first);
scanner.From(second);
scanner.BindWith<MockBindingGenerator>();
});
From()
据我所知,Ninject 3 中的新方法不允许链式调用。这是我能想到的最好的等价物:
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<>
一次呢?
编辑
* 绑定代码本身执行得很好。当我尝试获取绑定两次的程序集中存在的接口实例时,会发生异常。