我目前在使用 Ninject 时面临的挑战是,当我使用Rebind<>()
它时,它会删除所有绑定,即使是有条件的绑定。让我在下面给你一个愚蠢的例子。基本上,在我的情况下,我发现不受欢迎的行为是,当调用 Rebind 时,它将删除条件WhenInjectedInto<T>
绑定,而不是仅仅覆盖 non-conditional Bind<T>
。在下面的示例中,ctor 中的合约Contract.Assert(cat is Wild);
在 Rebind 后将失败。
有没有办法做我想做的事 - 能够保持已经注入的条件绑定并只覆盖非条件绑定?
PS:实际上,我正在尝试使用 DataContext 范围做一些有趣的事情,具体取决于它们的注入位置(在请求中或在异步命令中)
void Main()
{
StandardKernel kernel = new StandardKernel();
kernel.Bind<ICat>().To<Wild>();
kernel.Bind<ICat>().To<Wild>()
.WhenInjectedInto<EvilCat>();
kernel.Rebind<ICat>().To<Domestic>();
Contract.Assert(kernel.Get<ICat>() is Domestic);
kernel.Get<EvilCat>();
}
interface ICat {}
class Domestic : ICat {}
class Wild : ICat { }
class EvilCat
{
public EvilCat(ICat cat) {
Contract.Assert(cat is Wild);
}
}