У меня есть следующие определения.
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, сказав, что «Нет доступных привязок». Опять же, я ожидал, что он просто отправит пустое перечислимое число.
Итак, действительно ли такое поведение ожидается в дизайне или здесь есть ошибка? Если это задумано, есть ли обходной путь?