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

C# ASP.NET Core में कंट्रोलर में सर्विस डिपेंडेंसी कैसे इंजेक्ट करें?

ASP.NET Core बिल्ट-इन IoC कंटेनर का उपयोग करके डिपेंडेंसी क्लासेज के ऑब्जेक्ट्स को कंस्ट्रक्टर या मेथड के माध्यम से इंजेक्ट करता है। बिल्ट-इन कंटेनर IServiceProvider का इम्प्लीमेंटेशन है जो डिफ़ॉल्ट रूप से कंस्ट्रक्टर इंजेक्शन को सपोर्ट करता है। IoC कंटेनर द्वारा प्रबंधित टाइप्स (क्लासेज) को सर्विसेज कहा जाता है।

सर्विस रजिस्ट्रेशन और इंजेक्शन की प्रक्रिया

  1. सर्विस रजिस्टर करें: Startup क्लास के ConfigureServices मेथड में सर्विस को IoC कंटेनर के साथ रजिस्टर करें
  2. कंस्ट्रक्टर इंजेक्शन: कंट्रोलर के कंस्ट्रक्टर में सर्विस इंटरफेस को पैरामीटर के रूप में लें
  3. ऑटोमेटिक रिज़ॉल्यूशन: कंटेनर स्वचालित रूप से रजिस्टर्ड इम्प्लीमेंटेशन को इंजेक्ट करेगा

कोड उदाहरण

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

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

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

2. Startup.cs में सर्विस रजिस्ट्रेशन

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // ILog को Singleton के रूप में रजिस्टर करें
        services.AddSingleton<ILog, MyConsoleLogger>();
    }
}

3. कंट्रोलर में कंस्ट्रक्टर इंजेक्शन

public class HomeController : Controller
{
    private readonly ILog _logger;

    // कंस्ट्रक्टर इंजेक्शन - कंटेनर स्वचालित रूप से MyConsoleLogger इंस्टेंस प्रदान करेगा
    public HomeController(ILog logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.Info("HomeController.Index called");
        return View();
    }
}

महत्वपूर्ण बिंदु

  • IServiceCollection का Add() मेथड सर्विस को IoC कंटेनर के साथ रजिस्टर करने के लिए उपयोग होता है
  • ऊपर के उदाहरण में ILog सर्विस टाइप है और MyConsoleLogger इसका इम्प्लीमेंटेशन
  • Singleton रजिस्ट्रेशन का अर्थ है पूरे एप्लिकेशन में MyConsoleLogger का एक ही इंस्टेंस शेयर होगा
  • जहां भी ILog कंस्ट्रक्टर या मेथड पैरामीटर के रूप में शामिल होगा, कंटेनर वही इंस्टेंस इंजेक्ट करेगा

अन्य इंजेक्शन पैटर्न

// मेथड इंजेक्शन (FromServices एट्रिब्यूट के साथ)
public IActionResult About([FromServices] ILog logger)
{
    logger.Info("About action called");
    return View();
}

// प्रॉपर्टी इंजेक्शन (कम आम, विशेष स्थितियों के लिए)
[FromServices]
public ILog Logger { get; set; }

सर्वोत्तम अभ्यास: कंस्ट्रक्टर इंजेक्शन सबसे अनुशंसित पैटर्न है क्योंकि यह डिपेंडेंसीज को स्पष्ट करता है और टेस्टिंग को आसान बनाता है।

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

    Web API में DefaultHttpControllerSelector क्लास उस उपयुक्त कंट्रोलर एक्शन मेथड का चयन करने के लिए जिम्मेदार है जिसे हम URI में भेजते हैं। मान लीजिए हमें क्वेरी स्ट्रिंग में वर्जनिंग लागू करनी है जैसे नीचे: v=1 StudentsV1Controller (Version 1) v=2 StudentsV2Controller (Version 2) यदि हम वर्जनिंग

  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 में कंट्रोलर एक्शन के विभिन्न रिटर्न टाइप्स क्या हैं? C# ASP.NET WebAPI में कंट्रोलर एक्शन के विभिन्न रिटर्न टाइप्स क्या हैं?

    Web API एक्शन मेथड के निम्नलिखित रिटर्न टाइप्स हो सकते हैं। Void Primitive Type/Complex Type HttpResponseMessage IHttpActionResult 1. Void यह आवश्यक नहीं है कि सभी एक्शन मेथड्स कुछ न कुछ लौटाएं। इनका रिटर्न टाइप void हो सकता है। उदाहरण using DemoWebApplication.Models; using Syst