मैं आईआईएस (6,7,7.5) के भीतर चल Singletons बारे में एक प्रश्न और एक ASP.NET 4.0 वेब अनुप्रयोग (MVC3 एप्लिकेशन विशिष्ट होना) है।Asp.Net वेब अनुप्रयोगों पर सिंगलटन की फिल्म चल
मैं अपने प्रोजेक्ट में एक सिंगलटन उद्देश्य यह है कि पहुँचा जा सकता है और global.ascx में इस्तेमाल किया, Application_Start पर है, साथ ही आवेदन के भीतर कुछ अन्य स्थानों पर की है।
मेरी चिंता यह है कि इस सिंगलटन को प्रति उदाहरण परिदृश्य में पहुंच योग्य होने की आवश्यकता है। हालांकि, चूंकि आईआईएस अनिवार्य रूप से होस्टिंग प्रक्रिया है, क्या सिंगलटन आवेदन के सभी उदाहरणों में एक ही वस्तु होने वाला है?
अगर मैं [ThreadStatic] कीवर्ड उपयोग करें, यह आवेदन पूल स्तर पर अलग करता है?
अंत में, वहाँ एक रास्ता है, मैं आश्वस्त कर सकते हैं एक सिंगलटन केवल अपने आवेदन के कहने के अनुसार एक सिंगलटन है। यानी यदि मैं अपना आवेदन 1 वेबसाइट पर चलाता हूं, लेकिन 5 वर्चुअल निर्देशिकाओं के अंदर, सिंगलटन के 5 उदाहरण हैं या यदि मैं एक ही एप्लिकेशन पूल में 5 अलग-अलग वेबसाइटों पर अपनी वेबसाइट चलाता हूं।
उम्मीद है कि वह पर्याप्त स्पष्ट है, बैठाना आप सिंगलटन वस्तु देखना चाहता था, मैं नीचे यह के सामान्य विचार चिपकाया।
public sealed class Singleton : IDisposable
{
[ThreadStatic]
private static volatile Singleton _instance;
[ThreadStatic]
private static readonly object _syncRoot = new object();
public bool IsReleased { get; private set; }
public Singleton()
{
IsReleased = false;
}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
public void Dispose()
{
IsReleased = true;
Singleton._instance = null;
}
}
मैं अभी भी उलझन में हूं। क्या आप जानते हैं कि यह कैसे काम करता है या आप नहीं करते? क्या आप सवाल थोड़ा और स्पष्ट कर सकते हैं? – jcolebrand
मुझे पता है कि एक सिंगलटन प्रति प्रक्रिया स्तर पर "काम करता है"। सवाल यह है कि आईआईएस इसे मेरे आवेदन के कई उदाहरणों में कैसे संभालेगा। – John
जिज्ञासा से बाहर, आपका सिंगलटन डिस्पोजेबल क्यों है? क्या आप उस समय की अपेक्षा करते हैं जहां आप इसे निपटाना चाहते हैं, और फिर किसी को इसके लिए पूछने पर फिर से पुनरुत्थान करें? सही सिंगलटन आमतौर पर तब तक निपटान नहीं किए जाते जब तक कि एप्लिकेशन समाप्त नहीं हो जाता। – StriplingWarrior