हल की गई वस्तुओं में उनके कंटेनर के रूप में एक ही जीवनकाल/निपटान चक्र होता है, तब तक जब तक आप using
कथन या .Dispose()
विधि का उपयोग करके कोड में क्षणिक सेवाओं का मैन्युअल रूप से निपटान नहीं करते हैं।
एएसपी.नेट कोर में आपको एक स्कॉप्ड कंटेनर मिलता है जो प्रति अनुरोध तत्काल होता है और अनुरोध के अंत में निपटा जाता है। इस समय, इस कंटेनर द्वारा बनाए गए स्कोप्ड और क्षणिक निर्भरताओं को भी निपटान किया जाएगा (यदि वे IDisposable
इंटरफ़ेस लागू करते हैं), जिसे आप स्रोत कोड here पर भी देख सकते हैं। पैरेंट कंटेनर निपटारा हो जाता है
public void Dispose()
{
lock (ResolvedServices)
{
if (_disposeCalled)
{
return;
}
_disposeCalled = true;
if (_transientDisposables != null)
{
foreach (var disposable in _transientDisposables)
{
disposable.Dispose();
}
_transientDisposables.Clear();
}
// PERF: We've enumerating the dictionary so that we don't allocate to enumerate.
// .Values allocates a ValueCollection on the heap, enumerating the dictionary allocates
// a struct enumerator
foreach (var entry in ResolvedServices)
{
(entry.Value as IDisposable)?.Dispose();
}
ResolvedServices.Clear();
}
}
Singletons निपटारा हो, आम तौर पर अर्थ है कि जब आवेदन बंद हो जाता है।
टी एल; डॉ: आवेदन स्टार्टअप के दौरान जब तक आप scoped का दृष्टांत नहीं है/क्षणिक सेवाएं (app.ApplicationServices.GetService<T>()
का प्रयोग करके) और अपनी सेवाओं को सही ढंग से डिस्पोजेबल इंटरफ़ेस को लागू (जैसे pointed in MSDN) वहाँ कुछ भी नहीं आप की देखभाल की जरूरत है।
पैरेंट कंटेनर Configure(IApplicationBuilder app)
विधि के बाहर अनुपलब्ध है जब तक कि आप इसे बाहर करने योग्य बनाने के लिए कुछ मजेदार चीजें नहीं करते (जिसे आपको वैसे भी नहीं करना चाहिए)।
बेशक, इसे जल्द से जल्द क्षणिक सेवाओं को मुक्त करने के लिए प्रोत्साहित किया गया, खासकर यदि वे अधिक संसाधनों का उपभोग करते हैं।