我想知道Ninject的内核Get()函数是否在以下代码段中检索了一个实例化实例:
_kernel = new StandardKernel();
CreateBindings();
ICard card = _kernel.Get<ICard>();
ICard card2 = _kernel.Get<ICard>();
card
和card2
指向同一个实例,还是指向两个单独的实例?另外,如果我有ICard[]
并且我想用10个独特的ICard实例填充数组,我该怎么做?
答案 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循环可以用来填充你的数组。