प्रौद्योगिकी साझेदारी

C # IOC पात्रं, निर्भरता-इञ्जेक्शनं नियन्त्रणस्य च व्याप्तिः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

नियन्त्रणस्य व्यावृत्तिः (IoC) २.

परिभाषा : नियन्त्रणस्य विपर्ययः एकः डिजाइनसिद्धान्तः अस्ति यः पारम्परिकप्रोग्रामिंग् मध्ये नियन्त्रणस्य प्रवाहं विपर्ययति । पारम्परिकप्रोग्रामिंगप्रतिरूपेषु घटकानां मध्ये आश्रयाः घटकैः एव आन्तरिकरूपेण निर्मीयन्ते, परिपालिताः च भवन्ति । नियन्त्रणविधानस्य व्यावृत्तिः, एषा आश्रयः बाह्यपात्रेण (यथा Spring framework, Microsoft.Extensions.DependencyInjection in .NET इत्यादिभिः प्रबन्ध्यते घटकः स्वस्य आश्रयस्य उत्तरदायी नास्ति, अपितु सर्वाणि आश्रयाणि इन्जेक्शन् करोति बाह्यपात्रस्य माध्यमेन आवश्यकाः आश्रयाः।

मुख्य विचार: वस्तुनां निर्माणं तयोः मध्ये आश्रयस्य प्रबन्धनं च वस्तुभ्यः एव बाह्यपात्रेषु स्थानान्तरयति ।

लाभ

  • युग्मनं न्यूनीकरोतु: घटकानां मध्ये निर्भरताः हार्ड-कोडेड् न भवन्ति, अतः घटक-कार्यन्वयनानि अधिकसुलभतया प्रतिस्थापयितुं शक्यन्ते, येन प्रणाल्याः लचीलापनं, परिपालनक्षमता च सुधरति
  • मॉड्यूलरतायां सुधारं कुर्वन्तु: व्यक्तिगतघटकानाम् विकासः परीक्षणं च स्वतन्त्रतया कर्तुं शक्यते यतोहि ते विशिष्टकार्यन्वयनेषु न अवलम्बन्ते, अपितु अमूर्त-अन्तरफलकेषु अथवा अमूर्तवर्गेषु अवलम्बन्ते ।
  • परीक्षणं सुलभम्: यतः घटकानां मध्ये निर्भरताः बाह्यरूपेण भवन्ति, तस्मात् यूनिट् परीक्षणार्थं निर्भरतायाः अनुकरणार्थं नकलीवस्तूनाम् अथवा परीक्षणस्टब्स् इत्यस्य उपयोगः सुकरः भवति ।

निर्भरता इन्जेक्शन (DI) 1 .

परिभाषा : निर्भरता-इञ्जेक्शन् नियन्त्रणस्य व्यावृत्तिं प्राप्तुं विशिष्टः उपायः अस्ति । अस्मिन् वर्गान् स्वयमेव निर्मातुं न दत्त्वा आश्रयान् (सेवाः वा वस्तु वा) वर्गेषु पारयितुं प्रवृत्ताः सन्ति ।

साक्षात्कर्तुं विधिः

  • कन्स्ट्रक्टर इन्जेक्शन : वर्गस्य निर्मातुः माध्यमेन आश्रयाः प्रदत्ताः भवन्ति । C# इत्यस्मिन् DI इत्यस्य एतत् सर्वाधिकं सामान्यं अनुशंसितं च रूपम् अस्ति ।
  • सम्पत्ति इन्जेक्शन : वर्गस्य सार्वजनिकगुणानां माध्यमेन निर्भरतां नियुक्तं कुर्वन्तु। एषः उपायः लचीलतां प्रदाति परन्तु आन्तरिकस्थितिं उजागरयितुं शक्नोति तथा च कैप्सूलीकरणं न्यूनीकर्तुं शक्नोति ।
  • विधि इन्जेक्शन : विधिमापदण्डानां माध्यमेन निर्भरतां पारयन्तु। विशिष्टविधिना अपेक्षिताश्रयमात्रं प्रविष्टुं उपयुक्तम्।

IOC पात्रम्

परिभाषा :IOC container वस्तुजीवनचक्रस्य आश्रयस्य च प्रबन्धनार्थं एकः रूपरेखा अस्ति । एतत् स्वयमेव विन्यासाधारितवस्तूनि (यथा XML सञ्चिकाः, टिप्पणीः, कोडविन्यासः वा) निर्माति, एतेषु वस्तुषु आश्रयान् प्रविशति च ।

परिणाम

  • वस्तुसृष्टिः: विन्यासस्य आधारेण स्वयमेव वस्तुदृष्टान्तान् रचयन्तु ।
  • निर्भरता इन्जेक्शन: नियन्त्रणस्य व्यावृत्तिं प्राप्तुं वस्तुषु आश्रयान् प्रविशन्तु।
  • जीवन चक्र प्रबन्धन: संसाधनानाम् निर्माणं, विनाशं, पुनःप्रयोगं च समाविष्टं वस्तुनां जीवनचक्रस्य प्रबन्धनं कुर्वन्तु ।

आश्रयाणां प्रबन्धनार्थं IOC पात्राणां उपयोगं कुर्वन्तु

C# इत्यस्मिन्, भवान् निर्भरतायाः प्रबन्धनार्थं विविधानि IOC पात्राणि उपयोक्तुं शक्नोति, यथा Microsoft.Extensions.DependencyInjection (.NET Core इत्यस्य अन्तःनिर्मितं DI पात्रं तथा परवर्ती संस्करणं), Autofac इत्यादीनि निम्नलिखितम् Microsoft.Extensions.DependencyInjection उदाहरणरूपेण गृह्णाति यत् C# परियोजनासु निर्भरतां प्रबन्धयितुं IOC पात्राणां उपयोगः कथं करणीयः इति परिचयः भवति ।

Step 1: सेवायै पञ्जीकरणं कुर्वन्तु

सेवाः सामान्यतया .NET अनुप्रयोगेषु उपयुज्यन्तेProgram.csवाStartup.cs(ASP.NET Core परियोजनानां कृते) इत्यस्मिन् प्रयुक्तम्IServiceCollectionपञ्जीकरणार्थं अन्तरफलकम्।

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IMyService, MyService>(); // 将MyService注册为单例服务
    // 其他服务注册
}
  • 1
  • 2
  • 3
  • 4
  • 5
Step 2: आश्रिताः इन्जेक्ट् कुर्वन्तु

कन्स्ट्रक्टर् मार्गेण नियन्त्रके, सेवायां वा अन्यस्मिन् कस्मिन् अपि वर्गे निर्भरतां प्रविशन्तु ।

public class MyController : Controller
{
    private readonly IMyService _myService;

    public MyController(IMyService myService)
    {
        _myService = myService;
    }

    // ... 控制器的其他代码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

उपर्युक्ते उदाहरणे .MyControllerवर्गः कन्स्ट्रक्टर् मार्गेण इन्जेक्शन् भवतिIMyServiceअन्तरफलकस्य कार्यान्वयनम् (अर्थात् ।MyService दयालु)।एवं प्रकारेण कदाMyControllerयदा निर्मितं भवति तदा IOC पात्रं स्वयमेव भविष्यतिIMyServiceकार्यान्वयनम् कन्स्ट्रक्टर् मध्ये इन्जेक्शन् भवति ।

सावधानताएँ
  • अन्तरफलक-आधारित-अमूर्तानाम् उपयोगं कुर्वन्तु: लचीलतां परीक्षणक्षमतां च वर्धयितुं आश्रितप्रकारस्य कृते अन्तरफलकं वा अमूर्तवर्गं वा प्राधान्यं ददतु ।
  • एकलस्य अतिप्रयोगं परिहरन्तु: राज्यसम्बद्धानां विषयाणां परिहाराय एकलटनसेवानां सावधानीपूर्वकं उपयोगः करणीयः।
  • वस्तुजीवनचक्रस्य निरीक्षणं कुर्वन्तु: संसाधनस्य उपयोगं प्रभावीरूपेण प्रबन्धयितुं निर्भरतायाः (एकलः, व्याप्तिः, क्षणिकः) जीवनचक्रं अवगन्तुम्।