C# Ninject是否根据Get()检索新的唯一实例

C# Ninject是否根据Get()检索新的唯一实例,c#,inversion-of-control,ninject,C#,Inversion Of Control,Ninject,我想知道Ninject的kernel Get()函数是否在以下代码段中检索了Ninject的一个实例: _kernel = new StandardKernel(); CreateBindings(); ICard card = _kernel.Get<ICard>(); ICard card2 = _kernel.Get<ICard>(); \u kernel=new-StandardKernel(); CreateBindings(); ICard卡=_kerne

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

_kernel = new StandardKernel();
CreateBindings();

ICard card = _kernel.Get<ICard>();
ICard card2 = _kernel.Get<ICard>();
\u kernel=new-StandardKernel();
CreateBindings();
ICard卡=_kernel.Get();
ICard card2=_kernel.Get();

card
card2
是指向同一实例还是指向两个单独的实例?另外,如果我有一个
ICard[]
并且我想用10个唯一的ICard实例填充阵列,我怎么能做到这一点呢?

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

bool isSameInstance = card.Equals(card2);

如果这是真的,可以使用for循环填充数组。

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

_kernel.Bind<ICard>().To<Card>().InSingletonScope();
\u kernel.Bind()To().InSingletonScope();
但是,使用默认绑定时,两个实例将不同:

_kernel.Bind<ICard>().To<Card>();
\u kernel.Bind().To();
要填充数组,请使用以下代码:

var array = Enumerable.Repeat(1, 10)
     .Select(_ => _kernel.Get<ICard>())
     .ToArray();
var数组=可枚举。重复(1,10)
.Select(=>kernel.Get())
.ToArray();

您似乎忽略了的概念。我使用的绑定是默认的瞬态绑定,因此我认为dbugger的答案仍然适用。