1) Что такое IoC(Inversion of Control/инверсия зависимостей) и для чего он(принцип) нужен?
2) Что такое DI(Dependency Injection/инъекция зависимости) контейнер?
3) Что такое Scope/Lifestyle в понимании принципа IoC
4) Какие реализации DI контейнеров вы знаете на C#.
5) Какой DI контейнер является лучшим?
1) Инверсия зависимости это принцип объектно-ориентированного программирования, который служит для уменьшения связанности слоёв сложных приложений. Принцип заключается в том что каждый слой приложение работает с нижестоящим слоем не на прямую, а опосредованно(через слой абстракций). В результате это позволяет легко и безболезненно заменить реализацию каждого из слоёв на новую, при этом не затронув и работу вышестоящих слоёв.
2) DI контейнер это реализация, которая позволяет применить принцип инверсии зависимостей. Она знает о всех интерфейсах и их реализациях в системе и умеет их сопоставлять. Перед началом работы с контейнером необходимо зарегистрировать известные типы и их сопоставления(интерфейс-->реализация).
3) Scope это минимальный квант времени жизни экземпляра реализации интефейса. Другими словами Scope определяет когда необходимо создать новый экземпляр реализации, а когда можно использовать старый(ранее использованный экземпляр). Основные виды Scope:
1. Transient - создаётся новый экземпляр на каждый запрос к контейнеру
2. Thread - создаётся новый экземпляр на каждый поток
3. Single(Singleton) - всегда один экземпляр
...
Также нужно отметить что большинство реализаций DI контейнеров, позволяют объявить собственный Scope и задать ему собственную поведенческую модель.
4) Castle Windsor, Autofac, Ninject, Unity... (на самом деле их очень много, но если кандидат назовёт хотя-бы 2-3 то это хорошо)
5) Вопрос с подвохом. Правильный ответ - "нету такого". Ещё лучше если кандидат скажет - "в зависимости от необходимостей конкретного проекта." . А совсем прекрасно если он скажет второе и приведёт пример в котором один контейнер будет более выигрышно смотреться нежели другой.