2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
परिभाषा : नियन्त्रणस्य विपर्ययः एकः डिजाइनसिद्धान्तः अस्ति यः पारम्परिकप्रोग्रामिंग् मध्ये नियन्त्रणस्य प्रवाहं विपर्ययति । पारम्परिकप्रोग्रामिंगप्रतिरूपेषु घटकानां मध्ये आश्रयाः घटकैः एव आन्तरिकरूपेण निर्मीयन्ते, परिपालिताः च भवन्ति । नियन्त्रणविधानस्य व्यावृत्तिः, एषा आश्रयः बाह्यपात्रेण (यथा Spring framework, Microsoft.Extensions.DependencyInjection in .NET इत्यादिभिः प्रबन्ध्यते घटकः स्वस्य आश्रयस्य उत्तरदायी नास्ति, अपितु सर्वाणि आश्रयाणि इन्जेक्शन् करोति बाह्यपात्रस्य माध्यमेन आवश्यकाः आश्रयाः।
मुख्य विचार: वस्तुनां निर्माणं तयोः मध्ये आश्रयस्य प्रबन्धनं च वस्तुभ्यः एव बाह्यपात्रेषु स्थानान्तरयति ।
लाभ:
परिभाषा : निर्भरता-इञ्जेक्शन् नियन्त्रणस्य व्यावृत्तिं प्राप्तुं विशिष्टः उपायः अस्ति । अस्मिन् वर्गान् स्वयमेव निर्मातुं न दत्त्वा आश्रयान् (सेवाः वा वस्तु वा) वर्गेषु पारयितुं प्रवृत्ताः सन्ति ।
साक्षात्कर्तुं विधिः:
परिभाषा :IOC container वस्तुजीवनचक्रस्य आश्रयस्य च प्रबन्धनार्थं एकः रूपरेखा अस्ति । एतत् स्वयमेव विन्यासाधारितवस्तूनि (यथा XML सञ्चिकाः, टिप्पणीः, कोडविन्यासः वा) निर्माति, एतेषु वस्तुषु आश्रयान् प्रविशति च ।
परिणाम:
C# इत्यस्मिन्, भवान् निर्भरतायाः प्रबन्धनार्थं विविधानि IOC पात्राणि उपयोक्तुं शक्नोति, यथा Microsoft.Extensions.DependencyInjection (.NET Core इत्यस्य अन्तःनिर्मितं DI पात्रं तथा परवर्ती संस्करणं), Autofac इत्यादीनि निम्नलिखितम् Microsoft.Extensions.DependencyInjection उदाहरणरूपेण गृह्णाति यत् C# परियोजनासु निर्भरतां प्रबन्धयितुं IOC पात्राणां उपयोगः कथं करणीयः इति परिचयः भवति ।
सेवाः सामान्यतया .NET अनुप्रयोगेषु उपयुज्यन्तेProgram.cs
वाStartup.cs
(ASP.NET Core परियोजनानां कृते) इत्यस्मिन् प्रयुक्तम्IServiceCollection
पञ्जीकरणार्थं अन्तरफलकम्।
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMyService, MyService>(); // 将MyService注册为单例服务
// 其他服务注册
}
कन्स्ट्रक्टर् मार्गेण नियन्त्रके, सेवायां वा अन्यस्मिन् कस्मिन् अपि वर्गे निर्भरतां प्रविशन्तु ।
public class MyController : Controller
{
private readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
// ... 控制器的其他代码
}
उपर्युक्ते उदाहरणे .MyController
वर्गः कन्स्ट्रक्टर् मार्गेण इन्जेक्शन् भवतिIMyService
अन्तरफलकस्य कार्यान्वयनम् (अर्थात् ।MyService
दयालु)।एवं प्रकारेण कदाMyController
यदा निर्मितं भवति तदा IOC पात्रं स्वयमेव भविष्यतिIMyService
कार्यान्वयनम् कन्स्ट्रक्टर् मध्ये इन्जेक्शन् भवति ।