Я ищу способ запретить Autofac автоматически заполнять IEnumerable<>
в моем конструкторе.
Например, у меня есть класс School со следующими конструкторами
public School(string name) {...}
public School(string name, IEnumerable<IStudent> students) {...}
Вы можете использовать первый конструктор для создания объекта School, а затем использовать метод AddStudent для добавления учащихся в школу.
Вы можете использовать второй конструктор для создания School и передачи коллекции учащихся вбыть добавленным, когда школьный объект построен.
Если я создаю Func<string, ISchool> schoolFactory
, затем вызываю schoolFactory.Invoke("Test")
, Autofac будет использовать второй конструктор и автоматически создаст новый объект Student.
Интерфейс IStudent и классы Student зарегистрированы в Autofacи класс Student имеет конструктор по умолчанию.По умолчанию используется конструктор, потому что он используется в нашем пользовательском интерфейсе, когда пользователь добавляет нового студента.Новый Студент создается с пустым именем, и пользователь может ввести имя после создания объекта Студент.
Я попробовал следующее ...
Удалитьконструктор по умолчанию от Student.Это работает, но это означает, что я должен использовать другой конструктор и передать в string.Empty для имени студента.Основная проблема заключается в том, что у нас есть некоторый другой общий код для создания новых объектов, который требует от наших классов конструкторов по умолчанию.Это также не решение для всех наших классов.
Измените IEnumerable<IStudent>
на List<IStudent>
.Это работает, и это то, что я начал делать в нашем коде, но затем оно заставляет использовать List <> вместо универсального IEnumerable<>
.Это просто менее гибко.
Создайте Func<string, IEnumerable<IStudent>, ISchool> schoolFactory
и используйте schoolFactory.Invoke("Test", Enumerable.Empty<IStudent>)
.Это тоже работает.Это больше кода, но я думаю, что это более явно.
Есть ли общий способ, которым я могу помешать Autofac автоматически заполнить IEnumerable?