interface IWarrior
{
}
class Samurai : IWarrior
{
}
public class Program
{
public static void Main(string[] args)
{
var kernel = new StandardKernel();
kernel.Bind<IWarrior>().To<Samurai>().When(i =>
{
Console.WriteLine("test");
return true;
});
IWarrior warrior = kernel.Get<IWarrior>();
}
}
这是一个非常简单的场景,我正在创建虚拟接口 + 实现并使用NInject 的 Contextual Binding和When
方法 which绑定它们return true
,并且它还在调用时将“测试”消息输出到控制台。我以为When()
每个预期只会被调用一次,Get<>()
它只输出一次“test”,但神奇地(或不是?^_^)它输出 3 次“test”,
test
test
test
这意味着When()
每个Get<>()
请求调用 3 次(我添加了 IWarrior 的另一个实现并绑定它,然后输出计数为 6(每个绑定 3 个))。
为什么会这样?我们将对每个绑定进行一些重要(而且也很耗时)的检查,但是将其调用 3 次而不是 1 次将是一个问题。