Я новичок в контейнерах IOC, и я начинаю с NInject.
Что вы делаете, если хотите, чтобы ваш конструктор имел параметры, которые не являются сервисами, и не нужно создавать экземпляр контейнером IOC?
Например:
public class Person
{
private readonly string _name;
private readonly IPersonRepository _repository;
public Person(string name, IPersonRepository repository)
{
_name = name;
_repository = repository;
}
......
}
Представьте, что имя является требованием класса Person, поэтому, чтобы гарантировать, что Person всегда имеет имя, мы требуем, чтобы он был передан конструктору.
Как мы получим экземпляр Person, использующего NInject? Имя должно быть передано в зависимости от того, какой бит приложения создает новый Person, в то время как контейнер IOC должен пройти в IPersonRepository.
Я понимаю, что либо имя, либо репозиторий можно было бы вводить с использованием свойства вместо этого, но это не было бы чистым решением - мы теряем семантическую силу языка программирования.