Почему ninject вводит ноль, где он может вводить пустой перечислимый? - PullRequest
1 голос
/ 17 ноября 2010

У меня есть следующие определения.

interface IWeapon {}

class Warrior
{
 [Inject]
 public IEnumerable<IWeapon> Weapons { get; private set; }
}

Если я позвоню new StandardKernel().GetAll<IRule>(), оно, понятно, возвращает пустое перечислимое.

Теперь, если я позвоню new StandardKernel().Get<Engine>(), у возвращенного воина будет null в свойстве Weapons. Не следует ли вводить пустое перечислимое значение?


Вторичный вопрос. Я изменил класс Warrior следующим образом.

class Warrior
{
    public IEnumerable<IWeapon> Weapons { get; private set; }

 public Warrior(IEnumerable<IWeapon> weapons)
 { this.Weapons = weapons; }
}

На этот раз, если я позвоню new StandardKernel().Get<Engine>(), Ninject сгенерирует исключение ActivationException, сказав, что «Нет доступных привязок». Опять же, я ожидал, что он просто отправит пустое перечислимое число.

Итак, действительно ли такое поведение ожидается в дизайне или здесь есть ошибка? Если это задумано, есть ли обходной путь?

1 Ответ

2 голосов
/ 17 ноября 2010

У меня была дискуссия об этом, и сегодня я забил конструктор с Ианом.Мы оба согласились, что мы должны изменить это.Просто будьте немного терпеливы и подождите, пока мы не осуществим это.

...