Scrutor C# (.NET) पूरी गाइड: उदाहरण, उपयोग और टिप्स

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Scrutor C# (.NET) के लिए पूरी गाइड: उदाहरण सहित

Scrutor .NET प्लेटफॉर्म के लिए एक ओपन-सोर्स लाइब्रेरी है, जो बिल्ट-इन Dependency Injection (DI) मैकेनिज्म को assembly scanning की सुविधा देकर बढ़ाती है। यह नेमिंग कन्वेंशन, एट्रीब्यूट या इंटरफेस के आधार पर DI कंटेनर में सर्विसेज को ऑटोमैटिक रजिस्टर करने की अनुमति देती है, जिससे बड़े प्रोजेक्ट्स में IoC कंटेनर को कॉन्फ़िगर करना बहुत आसान हो जाता है।

इस लाइब्रेरी की ज़रूरत क्यों है? स्टैंडर्ड Microsoft.Extensions.DependencyInjection कंटेनर में हर सर्विस को मैन्युअली रजिस्टर करना पड़ता है: services.AddScoped<IMyService, MyService>()। दर्जनों या सैकड़ों सर्विसेज वाले प्रोजेक्ट में यह Startup.cs या Program.cs में कोड को बढ़ा देता है, पठनीयता कम करता है और गलतियों का खतरा बढ़ाता है। Scrutor इस समस्या को हल करता है, जिससे आप एक ही लाइन में पूरी असेंबली की सभी सर्विसेज रजिस्टर कर सकते हैं: services.Scan(scan => scan.FromAssemblyOf<IMyService>()...)।

Scrutor विशेष रूप से उन आर्किटेक्चर में उपयोगी है जहाँ Domain-Driven Design (DDD), Clean Architecture या मॉड्यूलर मोनोलिथ का उपयोग किया जाता है। यह ऑटोमैटिक रूप से सभी इंटरफेस इम्प्लीमेंटेशन, विशिष्ट एट्रीब्यूट वाली क्लासेज (जैसे [ServiceDescriptor]) या विशिष्ट नेमिंग पैटर्न से मेल खाने वाली क्लासेज (जैसे "Repository" पर खत्म होने वाली सभी क्लासेज) ढूंढ लेता है। इससे कोड साफ रहता है और नई सर्विसेज जोड़ना बहुत आसान हो जाता है, जिसके लिए DI कॉन्फ़िगरेशन बदलने की ज़रूरत नहीं होती।

इंस्टॉलेशन

Scrutor को NuGet Package Manager के ज़रिए इंस्टॉल किया जाता है। नीचे दिए गए कमांड में से कोई एक चलाएँ:

# .NET CLI के ज़रिए
dotnet add package Scrutor

# Package Manager Console (Visual Studio) के ज़रिए
Install-Package Scrutor

इंस्टॉलेशन के बाद प्रोजेक्ट में Scrutor लाइब्रेरी का रेफरेंस जुड़ जाएगा। सुनिश्चित करें कि आपके पास .NET SDK वर्शन 6.0 या उससे ऊपर (अनुशंसित .NET 8.0+) इंस्टॉल है।

त्वरित शुरुआत

आइए एक मिनिमल वर्किंग उदाहरण देखें। तीन फ़ाइलों वाला एक कंसोल एप्लिकेशन बनाएँ: इंटरफेस IGreetingService, इसका इम्प्लीमेंटेशन GreetingService और एंट्री पॉइंट Program.cs।

// IGreetingService.cs
public interface IGreetingService
{
    string Greet(string name);
}

// GreetingService.cs
public class GreetingService : IGreetingService
{
    public string Greet(string name) => $"Hello, {name}!";
}

// Program.cs
using Microsoft.Extensions.DependencyInjection;
using Scrutor;

var services = new ServiceCollection();

// मैन्युअल रजिस्ट्रेशन (सामान्य तरीका)
// services.AddTransient<IGreetingService, GreetingService>();

// Scrutor के ज़रिए रजिस्ट्रेशन (असेंबली स्कैनिंग)
services.Scan(scan => scan
    .FromAssemblyOf<IGreetingService>() // IGreetingService वाली असेंबली को स्कैन करें
    .AddClasses(classes => classes.AssignableTo<IGreetingService>()) // IGreetingService को इम्प्लीमेंट करने वाली क्लासेज खोजें
    .AsImplementedInterfaces() // इंटरफेस के इम्प्लीमेंटेशन के रूप में रजिस्टर करें
    .WithTransientLifetime()); // Transient लाइफटाइम सेट करें

var serviceProvider = services.BuildServiceProvider();
var greetingService = serviceProvider.GetRequiredService<IGreetingService>();
Console.WriteLine(greetingService.Greet("World"));
// आउटपुट: Hello, World!

इस उदाहरण में, Scrutor ऑटोमैटिक रूप से उसी असेंबली में GreetingService क्लास को ढूंढता है जिसमें IGreetingService इंटरफेस है, और इसे Transient के रूप में रजिस्टर करता है। अगर आप IGreetingService का कोई नया इम्प्लीमेंटेशन जोड़ते हैं, तो वह Program.cs में कोड बदले बिना ऑटोमैटिक रजिस्टर हो जाएगा।

मुख्य तरीके और क्लासेज

Scrutor कॉल्स की चेन बनाने के लिए fluent API प्रदान करता है। आइए 8 मुख्य तरीकों/क्लासेज को सिग्नेचर, विवरण और उदाहरणों के साथ देखें।

1. Scan(IServiceCollection, Action<ITypeSourceSelector>)

अनुशंसाएँ