Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

AddSingleton vs AddScoped เทียบกับ Add Transient C # Asp.net Core คืออะไร


มีสามวิธีในการลงทะเบียนการพึ่งพาใน Startup.cs เช่น AddSingleton, AddScoped และ AddTransient

เพิ่มซิงเกิลตัน

เมื่อเราลงทะเบียนประเภทเป็นซิงเกิลตัน จะมีเพียงอินสแตนซ์เดียวเท่านั้นที่สามารถใช้ได้ทั่วทั้งแอปพลิเคชันและสำหรับทุกคำขอ

คล้ายกับมีวัตถุอยู่นิ่ง

อินสแตนซ์ถูกสร้างขึ้นสำหรับคำขอแรกและอินสแตนซ์นี้จะพร้อมใช้งานทั่วทั้งแอปพลิเคชันและสำหรับคำขอแต่ละรายการที่ตามมา

public void ConfigureServices(IServiceCollection services){
   services.AddSingleton<ILog,Logger>()
}

เพิ่มขอบเขต

เมื่อเราลงทะเบียนประเภทเป็น Scoped อินสแตนซ์หนึ่งรายการจะพร้อมใช้งานทั่วทั้งแอปพลิเคชันต่อคำขอ เมื่อมีคำขอใหม่เข้ามา อินสแตนซ์ใหม่จะถูกสร้างขึ้น เพิ่มขอบเขตระบุว่ามีวัตถุเดียวตามคำขอ

public void ConfigureServices(IServiceCollection services){
   services.AddScoped<ILog,Logger>()
}

เพิ่มชั่วคราว

เมื่อเราลงทะเบียนประเภทเป็น Transient ทุกครั้งที่มีการสร้างอินสแตนซ์ใหม่ Transient สร้างอินสแตนซ์ใหม่สำหรับทุกบริการ/ตัวควบคุม เช่นเดียวกับทุกคำขอและผู้ใช้ทุกคน

public void ConfigureServices(IServiceCollection services){
   services.AddTransient<ILog,Logger>()
}


พารามิเตอร์ เพิ่มซิงเกิลตัน เพิ่มขอบเขต เพิ่มชั่วคราว
ตัวอย่าง คำขอ/แต่ละผู้ใช้เหมือนกัน หนึ่งรายการต่อคำขอ แตกต่างชั่วนิรันดร์
จำหน่ายแล้ว ปิดแอพ สิ้นสุดคำขอ สิ้นสุดคำขอ
ใช้ใน เมื่อจำเป็นต้องใช้ Singletonimplementation แอปพลิเคชันที่มีพฤติกรรมที่แตกต่างกันต่อผู้ใช้ น้ำหนักเบาและบริการไร้สัญชาติ