.NET

Dependency Injection

Lifetime ของ service (singleton, scoped, transient), การลงทะเบียน service, IServiceProvider, แนวทางปฏิบัติที่ดี

24 คำถามสัมภาษณ์·
Mid-Level
1

ความแตกต่างหลักระหว่าง lifetime Singleton, Scoped และ Transient คืออะไร?

คำตอบ

Singleton สร้าง instance เดียวตลอด lifetime ของแอปพลิเคชัน, Scoped สร้างหนึ่ง instance ต่อ HTTP request (หรือ scope) และ Transient สร้าง instance ใหม่ทุกครั้งที่ถูก inject lifetime เหล่านี้กำหนดว่าเมื่อใดและกี่ครั้งที่ container DI จะสร้าง instance ของ service ใช้ Singleton สำหรับ service ที่ไม่มี state แบบแชร์, Scoped สำหรับ service ที่ผูกกับ request (เช่น DbContext) และ Transient สำหรับ service น้ำหนักเบาที่ไม่มี state

2

ควรใช้ lifetime ใดในการลงทะเบียน DbContext ของ Entity Framework Core?

คำตอบ

ควรลงทะเบียน DbContext ด้วย lifetime แบบ Scoped เพราะมันไม่ thread-safe และเก็บสถานะ tracking ของ entity ไว้ แต่ละคำขอ HTTP ควรมี instance ของ DbContext เป็นของตัวเองเพื่อหลีกเลี่ยงปัญหาการทำงานพร้อมกัน การลงทะเบียนทำได้ด้วย AddDbContext ซึ่งกำหนดค่า lifetime แบบ Scoped ให้โดยอัตโนมัติ การใช้ Singleton จะทำให้เกิดข้อผิดพลาดด้านการทำงานพร้อมกัน และ Transient จะสิ้นเปลืองทรัพยากรเพราะสร้าง instance มากเกินไป

3

จะลงทะเบียน service ด้วย interface และการ implement ของมันได้อย่างไร?

คำตอบ

การลงทะเบียน service ทำได้ด้วยเมธอด AddSingleton, AddScoped หรือ AddTransient โดยระบุ interface เป็นประเภทของ service และคลาสที่เป็นรูปธรรมเป็นการ implement ไวยากรณ์คือ services.Add{Lifetime}<IInterface, Implementation>() แนวทางนี้ยึดตามหลักการ dependency inversion และช่วยให้การทดสอบง่ายขึ้นโดยอนุญาตให้แทนที่การ implement ได้ คอนเทนเนอร์ DI จะ resolve การ implement ที่เป็นรูปธรรมโดยอัตโนมัติเมื่อ inject interface

4

ในกรณีใดที่ควรเลือกใช้ AddSingleton มากกว่า AddScoped?

5

IServiceProvider มีบทบาทอย่างไรในระบบ DI?

+21 คำถามสัมภาษณ์

หัวข้อสัมภาษณ์ .NET อื่นๆ

พื้นฐาน C#

Junior
25 คำถาม

LINQ & Delegates

Junior
20 คำถาม

พื้นฐานสำคัญของภาษา C#

Junior
15 คำถาม

พื้นฐาน ASP.NET Core

Junior
18 คำถาม

วงจรชีวิตของ request ใน 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 คำถาม

Unit Testing และ 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 คำถาม

สถาปัตยกรรม Microservices

Senior
25 คำถาม

เชี่ยวชาญ .NET สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี