2010-02-01 17 views
8

वेब ऐप में, मुझे ProcessManager नामक कक्षा का केवल एक उदाहरण होना चाहिए। एक तरीका यह एक सिंगलटन बनाना है।सिंगलटन और एचटीपीएप्लिकेशंसस्टेट

जो विधि बेहतर है और क्यों है: दूसरी तरह इस तरह, HttpApplicationState उपयोग करने के लिए यकीन है कि मुझे हमेशा एक ही उदाहरण का उपयोग करने के लिए है?

उत्तर

7

आपके द्वारा दिए गए सीमित विवरण के आधार पर, मैं सिंगलटन चुनूंगा, क्योंकि उसके पास HttpContext.Current पर निर्भरता नहीं है, और एएसपी.Net पाइपलाइन के बाहर उपयोग किया जा सकता है (उदाहरण के लिए, जब आप इकाई परीक्षण लिखने के लिए चाहते हैं।)

इसके बाद आप इसे करने के लिए लिख पूरा कर लें, (एक के रूप में एक तरफ, जब आप ApplicationState में कुछ निर्धारित करते हैं, आप भी पहले उस पर Lock() कॉल करने के लिए, और फिर अनलॉक (आवश्यकता) सुनिश्चित करें कि यह थ्रेड सुरक्षित है।)

वैकल्पिक रूप से, जब आप अपना प्रोसेस मैनेजर बनाते हैं तो एक HttpContext के इंजेक्शन की अनुमति दें, जैसे कि आप इसे एक मॉक किए गए HttpContext के साथ उपयोग कर सकते हैं।

1

(मैं यह सोचते हैं रहा हूँ अपने ProcessManager निर्माता निजी है।)

यह एक वास्तविक सिंगलटन बनाना सबसे अच्छा होगा, क्योंकि इस तरह के दृष्टिकोण यह संरचना की दृष्टि से अन्य प्रोग्रामर कि गलती से कई बनाने के लिए अपने कोड को बनाए रखने के लिए कर रहे हैं असंभव होगा उदाहरणों। उपभोक्ता को HttpAplicationState को सीधे एक्सेस करने और ProcessManager इंस्टेंस को हटाने और बदलने से रोकने के लिए कुछ भी नहीं है। इसलिए आपको HttpAplicationState में ProcessManager के उदाहरण की सुरक्षा के लिए सम्मेलन पर भरोसा करना चाहिए।

केवल अगर कक्षा के कई उदाहरणों के लिए वास्तविक उपयोग केस मौजूद है, तो यह HttpAplicationState में उदाहरण की सुरक्षा के लिए सम्मेलन पर निर्भर करते हुए कई तत्कालताओं को अनुमति देने के लिए समझ में आता है।

1

अगर आप सिंगलटन के रूप में इसे लागू करने की योजना है, as per Jon Skeet (a.k.a सी # गुरु), वह व्यक्तिगत रूप से

public sealed class Singleton 
{ 
    static readonly Singleton instance=new Singleton(); 

    // Explicit static constructor to tell C# compiler 
    // not to mark type as beforefieldinit 
    static Singleton() 
    { 
    } 

    Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 
} 
नीचे कोड पसंद
संबंधित मुद्दे