Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# ASP.NET Core में रजिस्टर की गई सर्विस के लिए सर्विस लाइफटाइम कैसे निर्दिष्ट करें?

ASP.NET Core का अंतर्निहित IoC (Inversion of Control) कंटेनर रजिस्टर्ड सर्विस टाइप के लाइफटाइम को प्रबंधित करता है। यह निर्दिष्ट लाइफटाइम के आधार पर सर्विस इंस्टेंस को स्वचालित रूप से डिस्पोज करता है।

IoC कंटेनर द्वारा समर्थित तीन प्रकार के लाइफटाइम

1. Singleton (सिंगलटन)

IoC कंटेनर एप्लिकेशन के पूरे लाइफटाइम के दौरान सर्विस का एक ही इंस्टेंस बनाता है और शेयर करता है। सभी रिक्वेस्ट इसी एक इंस्टेंस का उपयोग करते हैं।

2. Transient (ट्रांजिएंट)

हर बार जब सर्विस मांगी जाती है, IoC कंटेनर निर्दिष्ट सर्विस टाइप का एक नया इंस्टेंस बनाता है। प्रत्येक रिक्वेस्ट को अलग इंस्टेंस मिलता है।

3. Scoped (स्कोप्ड)

IoC कंटेनर प्रति रिक्वेस्ट एक बार सर्विस टाइप का इंस्टेंस बनाता है और उसी रिक्वेस्ट के भीतर इसे शेयर किया जाता है। अलग-अलग रिक्वेस्ट को अलग इंस्टेंस मिलते हैं।

कोड उदाहरण

इंटरफेस और इम्प्लीमेंटेशन

public interface ILog
{
    void Info(string str);
}

class MyConsoleLogger : ILog
{
    public void Info(string str)
    {
        Console.WriteLine(str);
    }
}

ServiceDescriptor का उपयोग करके रजिस्ट्रेशन

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Singleton - मैन्युअली इंस्टेंस बनाकर
        services.Add(new ServiceDescriptor(typeof(ILog), new MyConsoleLogger()));
        
        // Transient
        services.Add(new ServiceDescriptor(typeof(ILog), typeof(MyConsoleLogger), ServiceLifetime.Transient));
        
        // Scoped
        services.Add(new ServiceDescriptor(typeof(ILog), typeof(MyConsoleLogger), ServiceLifetime.Scoped));
    }
}

एक्सटेंशन मेथड्स का उपयोग करके रजिस्ट्रेशन (अनुशंसित तरीका)

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Singleton रजिस्ट्रेशन
        services.AddSingleton<ILog, MyConsoleLogger>();
        services.AddSingleton(typeof(ILog), typeof(MyConsoleLogger));
        
        // Transient रजिस्ट्रेशन
        services.AddTransient<ILog, MyConsoleLogger>();
        services.AddTransient(typeof(ILog), typeof(MyConsoleLogger));
        
        // Scoped रजिस्ट्रेशन
        services.AddScoped<ILog, MyConsoleLogger>();
        services.AddScoped(typeof(ILog), typeof(MyConsoleLogger));
    }
}

कौन सा लाइफटाइम चुनें?

  • Singleton: स्टेटलेस सर्विसेज, कैशिंग, कॉन्फिगरेशन के लिए उपयुक्त
  • Transient: हल्की, स्टेटलेस सर्विसेज के लिए जो हर बार नई होनी चाहिए
  • Scoped: डेटाबेस कॉन्टेक्स्ट, यूजर-स्पेसिफिक डेटा, रिक्वेस्ट-स्कोप्ड ऑपरेशन्स के लिए आदर्श

ध्यान दें: Scoped सर्विसेज को Singleton में इंजेक्ट न करें, अन्यथा यह कैप्टिव डिपेंडेंसी समस्या पैदा कर सकता है।

  1. C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें? C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें?

    Accept Header सर्वर को बताता है कि ब्राउज़र किस फाइल फॉर्मेट में डेटा चाहता है। इन फाइल फॉर्मेट्स को आमतौर पर MIME-types कहा जाता है। MIME का अर्थ है Multipurpose Internet Mail Extensions। Headers में वर्जनिंग भेजना Version=1 StudentsV1Controller Version=2 StudentsV2Controller चूंकि हमने Accep

  1. C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें? C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें?

    कंट्रोलर में एक पब्लिक मेथड को एक्शन मेथड कहा जाता है। आइए एक उदाहरण पर विचार करें जहां DemoController क्लास ApiController से डेराइव्ड है और इसमें कई एक्शन मेथड्स हैं जिनके नाम HTTP वर्ब्स जैसे Get, Post, Put और Delete से मेल खाते हैं। उदाहरण public class DemoController : ApiController { public

  1. C# ASP.NET WebAPI में CORS समस्या कैसे हल करें? C# ASP.NET WebAPI में CORS समस्या कैसे हल करें?

    क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS) एक ऐसा तंत्र है जो ब्राउज़रों को यह बताने के लिए अतिरिक्त HTTP हेडर्स का उपयोग करता है कि एक ओरिजिन पर चल रहे वेब एप्लिकेशन को किसी अलग ओरिजिन से चुनिंदा रिसोर्सेज तक पहुंच दी जाए। एक वेब एप्लिकेशन एक क्रॉस-ओरिजिन HTTP रिक्वेस्ट निष्पादित करता है जब वह किसी ऐसे रि