ASP.NET Core बिल्ट-इन IoC कंटेनर का उपयोग करके डिपेंडेंसी क्लासेज के ऑब्जेक्ट्स को कंस्ट्रक्टर या मेथड के माध्यम से इंजेक्ट करता है। बिल्ट-इन कंटेनर IServiceProvider का इम्प्लीमेंटेशन है जो डिफ़ॉल्ट रूप से कंस्ट्रक्टर इंजेक्शन को सपोर्ट करता है। IoC कंटेनर द्वारा प्रबंधित टाइप्स (क्लासेज) को सर्विसेज कहा जाता है।
सर्विस रजिस्ट्रेशन और इंजेक्शन की प्रक्रिया
- सर्विस रजिस्टर करें:
Startupक्लास केConfigureServicesमेथड में सर्विस को IoC कंटेनर के साथ रजिस्टर करें - कंस्ट्रक्टर इंजेक्शन: कंट्रोलर के कंस्ट्रक्टर में सर्विस इंटरफेस को पैरामीटर के रूप में लें
- ऑटोमेटिक रिज़ॉल्यूशन: कंटेनर स्वचालित रूप से रजिस्टर्ड इम्प्लीमेंटेशन को इंजेक्ट करेगा
कोड उदाहरण
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; }
सर्वोत्तम अभ्यास: कंस्ट्रक्टर इंजेक्शन सबसे अनुशंसित पैटर्न है क्योंकि यह डिपेंडेंसीज को स्पष्ट करता है और टेस्टिंग को आसान बनाता है।