
Dependency Injection
Lifetime сервісів (singleton, scoped, transient), реєстрація сервісів, IServiceProvider, найкращі практики
1Яка основна різниця між lifetime Singleton, Scoped і Transient?
Яка основна різниця між lifetime Singleton, Scoped і Transient?
Відповідь
Singleton створює один екземпляр на весь lifetime застосунку, Scoped створює один екземпляр на HTTP-запит (або scope), а Transient створює новий екземпляр при кожному впровадженні. Ці lifetime визначають, коли і скільки разів DI-контейнер створює екземпляр сервісу. Використовуйте Singleton для безстанових спільних сервісів, Scoped для сервісів, прив'язаних до запиту (як DbContext), і Transient для легких безстанових сервісів.
2Який lifetime слід використовувати для реєстрації DbContext Entity Framework Core?
Який lifetime слід використовувати для реєстрації DbContext Entity Framework Core?
Відповідь
DbContext слід реєструвати з lifetime Scoped, оскільки він не є thread-safe і зберігає стан відстеження сутностей. Кожен HTTP-запит повинен мати власний екземпляр DbContext, щоб уникнути проблем конкурентності. Реєстрація виконується за допомогою AddDbContext, який автоматично налаштовує lifetime Scoped. Використання Singleton спричинило б помилки конкурентності, а Transient марнував би ресурси, створюючи забагато екземплярів.
3Як зареєструвати сервіс з interface та його реалізацією?
Як зареєструвати сервіс з interface та його реалізацією?
Відповідь
Реєстрація сервісу виконується методами AddSingleton, AddScoped або AddTransient, вказуючи interface як тип сервісу, а конкретний клас як реалізацію. Синтаксис: services.Add{Lifetime}<IInterface, Implementation>(). Цей підхід дотримується принципу інверсії залежностей і полегшує тестування, дозволяючи підміну реалізацій. Контейнер DI автоматично розв'яже конкретну реалізацію під час впровадження interface.
У якому випадку слід надавати перевагу AddSingleton перед AddScoped?
Яка роль IServiceProvider у системі DI?
+21 питань зі співбесід
Інші теми співбесід .NET
Основи C#
LINQ & Delegates
Основи мови C#
Основи ASP.NET Core
Життєвий цикл запиту в ASP.NET Core
Configuration & Settings
Життєвий цикл застосунку
Entity Framework Core
Minimal APIs
Розробка Web API
Async в ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Серіалізація JSON
Entity Framework Core просунутий
Розширені можливості C#
Clean Architecture
Logging, Monitoring & Observability
Модульне тестування та xUnit
Інтеграційні тести
Docker & Containerization
Керування пакетами NuGet
Memory Management & GC
Реактивне програмування
Async/await і патерни
.NET Design Patterns
Оптимізація продуктивності
Безпека та Best Practices
SignalR і реальний час
Архітектура мікросервісів
Опануй .NET для наступної співбесіди
Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.
Почни безкоштовно