Ninject是否为每个Get()检索新的唯一实例

时间:2012-03-15 23:12:14

标签: c# inversion-of-control ninject

我想知道Ninject的内核Get()函数是否在以下代码段中检索了一个实例化实例:

_kernel = new StandardKernel();
CreateBindings();

ICard card = _kernel.Get<ICard>();
ICard card2 = _kernel.Get<ICard>();

cardcard2指向同一个实例,还是指向两个单独的实例?另外,如果我有ICard[]并且我想用10个独特的ICard实例填充数组,我该怎么做?

2 个答案:

答案 0 :(得分:4)

这取决于如何配置该类型的绑定。如果绑定是单例,则两个实例都是相同的:

_kernel.Bind<ICard>().To<Card>().InSingletonScope();

但是,当您使用默认绑定时,两个实例都将不同:

_kernel.Bind<ICard>().To<Card>();

要填充数组,请使用以下代码:

var array = Enumerable.Repeat(1, 10)
     .Select(_ => _kernel.Get<ICard>())
     .ToArray();

答案 1 :(得分:2)

单独的实例,它是一个IOC框架,它不是缓存。假设ICard是通过引用类型实现的,您可以通过尝试...

来证明这一点
bool isSameInstance = card.Equals(card2);

鉴于这是真的,for循环可以用来填充你的数组。