
Dependency Injection
Lifetime ของ service (singleton, scoped, transient), การลงทะเบียน service, IServiceProvider, แนวทางปฏิบัติที่ดี
1ความแตกต่างหลักระหว่าง lifetime Singleton, Scoped และ Transient คืออะไร?
ความแตกต่างหลักระหว่าง 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?
ควรใช้ 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 ด้วย interface และการ implement ของมันได้อย่างไร?
คำตอบ
การลงทะเบียน service ทำได้ด้วยเมธอด AddSingleton, AddScoped หรือ AddTransient โดยระบุ interface เป็นประเภทของ service และคลาสที่เป็นรูปธรรมเป็นการ implement ไวยากรณ์คือ services.Add{Lifetime}<IInterface, Implementation>() แนวทางนี้ยึดตามหลักการ dependency inversion และช่วยให้การทดสอบง่ายขึ้นโดยอนุญาตให้แทนที่การ implement ได้ คอนเทนเนอร์ DI จะ resolve การ implement ที่เป็นรูปธรรมโดยอัตโนมัติเมื่อ inject interface
ในกรณีใดที่ควรเลือกใช้ AddSingleton มากกว่า AddScoped?
IServiceProvider มีบทบาทอย่างไรในระบบ DI?
+21 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ .NET อื่นๆ
พื้นฐาน C#
LINQ & Delegates
พื้นฐานสำคัญของภาษา C#
พื้นฐาน ASP.NET Core
วงจรชีวิตของ request ใน 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
Unit Testing และ xUnit
การทดสอบแบบบูรณาการ
Docker & Containerization
การจัดการแพ็กเกจ NuGet
Memory Management & GC
การเขียนโปรแกรมแบบรีแอกทีฟ
Async/await และรูปแบบ
.NET Design Patterns
การเพิ่มประสิทธิภาพการทำงาน
ความปลอดภัยและ Best Practices
SignalR และเรียลไทม์
สถาปัตยกรรม Microservices
เชี่ยวชาญ .NET สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี