Получает ли Ninject новые уникальные экземпляры в Get () - PullRequest
2 голосов
/ 16 марта 2012

Мне интересно, получает ли функция ядра Get () Ninject один экземплярный экземпляр в следующем фрагменте:

_kernel = new StandardKernel();
CreateBindings();

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

Указывает ли card и card2 на один и тот же экземпляр или на два?отдельные случаи?Кроме того, если у меня было ICard[], и я хотел заполнить массив 10 уникальными экземплярами ICard, как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Это зависит от того, как была настроена привязка для этого типа.Если привязка одноэлементная, оба экземпляра будут одинаковыми:

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

Однако при использовании привязки по умолчанию оба экземпляра будут разными:

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

Для заполнения массива используйте следующий код:

var array = Enumerable.Repeat(1, 10)
     .Select(_ => _kernel.Get<ICard>())
     .ToArray();
2 голосов
/ 16 марта 2012

Отдельные экземпляры, это среда IOC, это не кеш.Предполагая, что ICard реализован ссылочным типом, вы можете доказать это, попробовав ...

bool isSameInstance = card.Equals(card2);

Учитывая, что это правда, цикл for можно использовать для заполнения массива.

...