.NET

Dependency Injection

Lifetime сервісів (singleton, scoped, transient), реєстрація сервісів, IServiceProvider, найкращі практики

24 питань зі співбесід·
Mid-Level
1

Яка основна різниця між lifetime Singleton, Scoped і Transient?

Відповідь

Singleton створює один екземпляр на весь lifetime застосунку, Scoped створює один екземпляр на HTTP-запит (або scope), а Transient створює новий екземпляр при кожному впровадженні. Ці lifetime визначають, коли і скільки разів DI-контейнер створює екземпляр сервісу. Використовуйте Singleton для безстанових спільних сервісів, Scoped для сервісів, прив'язаних до запиту (як DbContext), і Transient для легких безстанових сервісів.

2

Який lifetime слід використовувати для реєстрації DbContext Entity Framework Core?

Відповідь

DbContext слід реєструвати з lifetime Scoped, оскільки він не є thread-safe і зберігає стан відстеження сутностей. Кожен HTTP-запит повинен мати власний екземпляр DbContext, щоб уникнути проблем конкурентності. Реєстрація виконується за допомогою AddDbContext, який автоматично налаштовує lifetime Scoped. Використання Singleton спричинило б помилки конкурентності, а Transient марнував би ресурси, створюючи забагато екземплярів.

3

Як зареєструвати сервіс з interface та його реалізацією?

Відповідь

Реєстрація сервісу виконується методами AddSingleton, AddScoped або AddTransient, вказуючи interface як тип сервісу, а конкретний клас як реалізацію. Синтаксис: services.Add{Lifetime}<IInterface, Implementation>(). Цей підхід дотримується принципу інверсії залежностей і полегшує тестування, дозволяючи підміну реалізацій. Контейнер DI автоматично розв'яже конкретну реалізацію під час впровадження interface.

4

У якому випадку слід надавати перевагу AddSingleton перед AddScoped?

5

Яка роль IServiceProvider у системі DI?

+21 питань зі співбесід

Інші теми співбесід .NET

Основи C#

Junior
25 запитань

LINQ & Delegates

Junior
20 запитань

Основи мови C#

Junior
15 запитань

Основи ASP.NET Core

Junior
18 запитань

Життєвий цикл запиту в ASP.NET Core

Junior
20 запитань

Configuration & Settings

Junior
20 запитань

Життєвий цикл застосунку

Junior
20 запитань

Entity Framework Core

Mid-Level
25 запитань

Minimal APIs

Mid-Level
18 запитань

Розробка Web API

Mid-Level
22 запитань

Async в ASP.NET Core

Mid-Level
20 запитань

Authentication & Authorization

Mid-Level
18 запитань

HttpClient & Networking

Mid-Level
20 запитань

Серіалізація JSON

Mid-Level
20 запитань

Entity Framework Core просунутий

Mid-Level
25 запитань

Розширені можливості C#

Mid-Level
20 запитань

Clean Architecture

Mid-Level
20 запитань

Logging, Monitoring & Observability

Mid-Level
22 запитань

Модульне тестування та xUnit

Mid-Level
20 запитань

Інтеграційні тести

Mid-Level
18 запитань

Docker & Containerization

Mid-Level
16 запитань

Керування пакетами NuGet

Mid-Level
16 запитань

Memory Management & GC

Senior
22 запитань

Реактивне програмування

Senior
24 запитань

Async/await і патерни

Senior
26 запитань

.NET Design Patterns

Senior
24 запитань

Оптимізація продуктивності

Senior
22 запитань

Безпека та Best Practices

Senior
24 запитань

SignalR і реальний час

Senior
22 запитань

Архітектура мікросервісів

Senior
25 запитань

Опануй .NET для наступної співбесіди

Отримай доступ до всіх питань, flashcards, технічних тестів, вправ code review та симуляторів співбесід.

Почни безкоштовно