บนเว็บไซต์ ASP.NET มีคลาสสแตติกที่ไม่ซ้ำกันสำหรับแต่ละคำขอของเว็บหรือพวกมันจะถูกสร้างอินสแตนซ์เมื่อใดก็ตามที่จำเป็นและ GCed เมื่อใดก็ตามที่ GC ตัดสินใจที่จะกำจัดพวกเขา?
เหตุผลที่ฉันถามก็เพราะฉันได้เขียนบางคลาสคงที่ก่อนใน C # และพฤติกรรมที่แตกต่างกว่าที่ฉันคาดไว้ ฉันคาดหวังว่าคลาสสแตติกจะไม่ซ้ำกันในแต่ละคำขอ แต่ดูเหมือนจะไม่เป็นเช่นนั้น
หากพวกเขาไม่ซ้ำกันในแต่ละคำขอมีวิธีที่จะอนุญาตให้พวกเขาเป็น?
ปรับปรุง:
คำตอบ driis ให้ฉันเป็นสิ่งที่ฉันต้องการ ฉันใช้คลาสเดี่ยวอยู่แล้ว แต่มันใช้อินสแตนซ์แบบคงที่และดังนั้นจึงถูกแชร์ระหว่างคำขอแม้ว่าผู้ใช้จะแตกต่างกันซึ่งในกรณีนี้เป็นสิ่งที่ไม่ดี การใช้HttpContext.Current.Items
แก้ปัญหาของฉันได้อย่างสมบูรณ์แบบ สำหรับทุกคนที่สะดุดกับคำถามนี้ในอนาคตนี่คือการนำไปปฏิบัติของฉันง่ายและสั้นลงเพื่อให้เข้าใจรูปแบบได้ง่าย:
using System.Collections;
using System.Web;
public class GloballyAccessibleClass
{
private GloballyAccessibleClass() { }
public static GloballyAccessibleClass Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if(!items.Contains("TheInstance"))
{
items["TheInstance"] = new GloballyAccessibleClass();
}
return items["TheInstance"] as GloballyAccessibleClass;
}
}
}
filterContext.Result = new RedirectResult(...)
คุณจะสูญเสียรายการของคุณเพราะ HttpContext ใหม่จะถูกสร้างขึ้น รายละเอียดเพิ่มเติมได้ที่นี่: stackoverflow.com/questions/16697601/…