Dependency injection
সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রে, নির্ভরতা ইনজেকশন হল একটি প্রোগ্রামিং কৌশল যেখানে কোনও বস্তু বা ফাংশন অভ্যন্তরীণভাবে তৈরি করার পরিবর্তে তার প্রয়োজনীয় অন্যান্য বস্তু বা ফাংশন গ্রহণ করে। নির্ভরতা ইনজেকশনের লক্ষ্য হল বস্তু নির্মাণ এবং সেগুলির ব্যবহারের উদ্বেগকে আলাদা করা, যা আলগাভাবে সংযুক্ত প্রোগ্রামগুলির দিকে পরিচালিত করে। প্যাটার্নটি নিশ্চিত করে যে প্রদত্ত পরিষেবাটি ব্যবহার করতে চায় এমন কোনও বস্তু বা ফাংশনকে সেই পরিষেবাগুলি কীভাবে তৈরি করতে হয় তা জানতে হবে না। পরিবর্তে, গ্রহণকারী 'ক্লায়েন্ট' (বস্তু বা ফাংশন) এর নির্ভরতা বাহ্যিক কোড (একটি 'ইনজেক্টর') দ্বারা সরবরাহ করা হয়, যা এটি জানে না। নির্ভরতা ইনজেকশন অন্তর্নিহিত নির্ভরশীলতাকে স্পষ্ট করে তোলে এবং নিম্নলিখিত সমস্যাগুলি সমাধান করতে সহায়তা করেঃ কীভাবে একটি শ্রেণী তার উপর নির্ভরশীল বস্তুর সৃষ্টি থেকে স্বাধীন হতে পারে? কিভাবে একটি অ্যাপ্লিকেশন এবং এটি যে বস্তুগুলি ব্যবহার করে তা বিভিন্ন কনফিগারেশনকে সমর্থন করতে পারে? কিভাবে একটি কোডের আচরণ সরাসরি সম্পাদনা না করে পরিবর্তন করা যেতে পারে? ডিপেন্ডেন্সি ইনজেকশন প্রায়শই কোডকে ডিপেন্ডেন্সি ইনভার্সন নীতির সাথে সামঞ্জস্য রাখতে ব্যবহৃত হয়। স্ট্যাটিক্যালি-টাইপ করা ভাষাগুলিতে নির্ভরতা ইনজেকশন ব্যবহার করার অর্থ হল একজন ক্লায়েন্টকে কেবল তাদের সুনির্দিষ্ট বাস্তবায়নের পরিবর্তে যে পরিষেবাগুলি ব্যবহার করে তার ইন্টারফেসগুলি ঘোষণা করতে হবে, যা পুনরায় কম্পাইল না করে রানটাইমে কোন পরিষেবাগুলি ব্যবহার করা হয় তা পরিবর্তন করা সহজ করে তোলে। প্রয়োগ কাঠামো প্রায়শই নিয়ন্ত্রণের বিপরীতকরণের সাথে নির্ভরতা ইনজেকশনকে একত্রিত করে। নিয়ন্ত্রণের বিপরীতমুখীকরণের অধীনে, কাঠামোটি প্রথমে একটি বস্তু তৈরি করে (যেমন একটি নিয়ামক), তারপর তাতে নিয়ন্ত্রণ প্রবাহ প্রেরণ করে। নির্ভরতা ইনজেকশনের সাথে, কাঠামোটি অ্যাপ্লিকেশন অবজেক্ট (প্রায়শই কনস্ট্রাক্টর পদ্ধতির পরামিতিগুলিতে) দ্বারা ঘোষিত নির্ভরতাগুলিকে তাত্ক্ষণিক করে এবং নির্ভরতাগুলি বস্তুর মধ্যে প্রেরণ করে। নির্ভরতা ইনজেকশন "নির্ভরশীলতার বাস্তবায়নের উপর বিপরীত নিয়ন্ত্রণ" ধারণাটি প্রয়োগ করে, যে কারণে কিছু জাভা কাঠামো সাধারণভাবে "নিয়ন্ত্রণের বিপরীতকরণ" ধারণার নাম দেয় (নিয়ন্ত্রণ প্রবাহের বিপরীতকরণের সাথে বিভ্রান্ত হবেন না)। ভূমিকা নির্ভরতা ইনজেকশনে চারটি ভূমিকা রয়েছেঃ পরিষেবা, ক্লায়েন্ট, ইন্টারফেস এবং ইনজেক্টর। পরিষেবা এবং ক্লায়েন্ট একটি পরিষেবা হল এমন কোনও শ্রেণী যা দরকারী কার্যকারিতা ধারণ করে। পরিবর্তে, ক্লায়েন্ট হল যে কোনও শ্রেণী যা পরিষেবা ব্যবহার করে। একজন গ্রাহকের যে পরিষেবাগুলি প্রয়োজন তা হল গ্রাহকের নির্ভরতা। যে কোনও বস্তু একটি পরিষেবা বা ক্লায়েন্ট হতে পারে; নামগুলি শুধুমাত্র একটি ইনজেকশনে বস্তুর ভূমিকার সাথে সম্পর্কিত। একই বস্তু এমনকি ক্লায়েন্ট (এটি ইনজেকশন পরিষেবা ব্যবহার করে) এবং একটি পরিষেবা (এটি অন্যান্য বস্তুর মধ্যে ইনজেকশন দেওয়া হয়) উভয়ই হতে পারে। ইনজেকশনের পরে, পরিষেবাটি গ্রাহকের রাজ্যের অংশ করা হয়, ব্যবহারের জন্য উপলব্ধ। ইন্টারফেস ক্লায়েন্টদের জানা উচিত নয় যে তাদের নির্ভরতা কীভাবে প্রয়োগ করা হয়, কেবল তাদের নাম এবং এপিআই। উদাহরণস্বরূপ, ইমেলগুলি পুনরুদ্ধার করে এমন একটি পরিষেবা পর্দার আড়ালে আইএমএপি বা পিওপি3 প্রোটোকল ব্যবহার করতে পারে, তবে এই বিবরণ সম্ভবত কলিং কোডের সাথে অপ্রাসঙ্গিক যা কেবল একটি ইমেল পুনরুদ্ধার করতে চায়। বাস্তবায়নের বিবরণ উপেক্ষা করে, ক্লায়েন্টদের তাদের নির্ভরশীলতাগুলি পরিবর্তন করার প্রয়োজন হয় না। ইনজেক্টর ইনজেক্টর, যাকে কখনও কখনও অ্যাসেম্বলার, ধারক, সরবরাহকারী বা কারখানাও বলা হয়, ক্লায়েন্টকে পরিষেবাগুলি প্রবর্তন করে। ইনজেক্টরের ভূমিকা হল জটিল অবজেক্ট গ্রাফ তৈরি এবং সংযুক্ত করা, যেখানে অবজেক্টগুলি ক্লায়েন্ট এবং পরিষেবা উভয়ই হতে পারে। ইনজেক্টর নিজেই একসাথে কাজ করা অনেক বস্তু হতে পারে, তবে ক্লায়েন্ট হওয়া উচিত নয়, কারণ এটি একটি বৃত্তাকার নির্ভরতা তৈরি করবে। যেহেতু নির্ভরতা ইনজেকশন বস্তুগুলি কীভাবে তৈরি করা হয় এবং সেগুলি কীভাবে ব্যবহার করা হয় তা পৃথক করে, এটি প্রায়শই বেশিরভাগ অবজেক্ট-ওরিয়েন্টেড ভাষায় পাওয়া নতুন কীওয়ার্ডের গুরুত্বকে হ্রাস করে। যেহেতু কাঠামোটি পরিষেবা তৈরি পরিচালনা করে, তাই প্রোগ্রামার কেবল সরাসরি মূল্য বস্তু তৈরি করার প্রবণতা দেখায় যা প্রোগ্রামের ডোমেনের সত্তাকে উপস্থাপন করে (যেমন কোনও ব্যবসায়িক অ্যাপে কোনও কর্মচারী বস্তু বা শপিং অ্যাপে কোনও অর্ডার বস্তু)। সাদৃশ্য একটি উপমা হিসাবে, গাড়িগুলিকে এমন পরিষেবা হিসাবে ভাবা যেতে পারে যা মানুষকে এক জায়গা থেকে অন্য জায়গায় পরিবহনের দরকারী কাজ করে। গাড়ির ইঞ্জিনগুলির জন্য গ্যাস, ডিজেল বা বিদ্যুতের প্রয়োজন হতে পারে, তবে এই বিবরণটি গ্রাহকের কাছে গুরুত্বহীন-একজন চালক-যিনি কেবল যত্ন করেন যে এটি তাদের গন্তব্যে পৌঁছাতে পারে কিনা। গাড়িগুলি তাদের প্যাডেল, স্টিয়ারিং চাকা এবং অন্যান্য নিয়ন্ত্রণের মাধ্যমে একটি অভিন্ন ইন্টারফেস উপস্থাপন করে। এইভাবে, ফ্যাক্টরি লাইনে তাদের কোন ইঞ্জিন দিয়ে 'ইনজেকশন' দেওয়া হয়েছিল তা গুরুত্বপূর্ণ নয় এবং চালকরা প্রয়োজন অনুযায়ী যে কোনও ধরনের গাড়ির মধ্যে পরিবর্তন করতে পারেন। সুবিধা ও অসুবিধাগুলি নির্ভরতা ইনজেকশনের একটি মৌলিক সুবিধা হল শ্রেণী এবং তাদের নির্ভরশীলতার মধ্যে সংযোগ হ্রাস করা। কোনও গ্রাহকের নির্ভরতা কীভাবে প্রয়োগ করা হয় সে সম্পর্কে জ্ঞান সরিয়ে দেওয়ার মাধ্যমে, প্রোগ্রামগুলি আরও পুনঃব্যবহারযোগ্য, পরীক্ষামূলক এবং রক্ষণাবেক্ষণযোগ্য হয়ে ওঠে। এর ফলে নমনীয়তা বৃদ্ধি পায়ঃ একজন ক্লায়েন্ট এমন যে কোনও কিছুতে কাজ করতে পারে যা ক্লায়েন্টের প্রত্যাশিত অভ্যন্তরীণ ইন্টারফেসকে সমর্থন করে। আরও সাধারণভাবে, নির্ভরতা ইনজেকশন বয়লারপ্লেট কোডকে হ্রাস করে, যেহেতু সমস্ত নির্ভরতা সৃষ্টি একটি একক উপাদান দ্বারা পরিচালিত হয়। পরিশেষে, নির্ভরতা ইনজেকশন সমবর্তী বিকাশের অনুমতি দেয়। দুজন ডেভেলপার স্বাধীনভাবে এমন ক্লাস তৈরি করতে পারে যা একে অপরকে ব্যবহার করে, যখন শুধুমাত্র ইন্টারফেসটি জানতে হবে যার মাধ্যমে ক্লাসগুলি যোগাযোগ করবে। প্লাগিনগুলি প্রায়শই তৃতীয় পক্ষের দ্বারা তৈরি করা হয় যা কখনও মূল পণ্যের বিকাশকারীদের সাথে কথা বলে না। নির্ভরশীলতা ইনজেকশনের অনেক সুবিধা ইউনিট-পরীক্ষার ক্ষেত্রে বিশেষভাবে প্রাসঙ্গিক। উদাহরণস্বরূপ, নির্ভরশীলতা ইনজেকশন একটি সিস্টেমের কনফিগারেশন বিবরণকে কনফিগারেশন ফাইলগুলিতে বাহ্যিক করার জন্য ব্যবহার করা যেতে পারে, যা সিস্টেমটিকে পুনরায় সংকলন না করে পুনরায় কনফিগার করার অনুমতি দেয়। বিভিন্ন পরিস্থিতির জন্য পৃথক বিন্যাস লেখা যেতে পারে যার জন্য উপাদানগুলির বিভিন্ন বাস্তবায়নের প্রয়োজন হয়। একইভাবে, যেহেতু নির্ভরতা ইনজেকশনের জন্য কোড আচরণে কোনও পরিবর্তনের প্রয়োজন হয় না, তাই এটি একটি রিফ্যাক্টরিং হিসাবে লিগ্যাসি কোডে প্রয়োগ করা যেতে পারে। এটি ক্লায়েন্টদের আরও স্বাধীন করে তোলে এবং স্টাব বা মক অবজেক্ট ব্যবহার করে বিচ্ছিন্নভাবে একক পরীক্ষা করা সহজ করে তোলে, যা পরীক্ষার অধীনে নয় এমন অন্যান্য বস্তুর অনুকরণ করে। পরীক্ষার এই স্বাচ্ছন্দ্য প্রায়শই নির্ভরতা ইনজেকশন ব্যবহার করার সময় প্রথম সুবিধা লক্ষ্য করা যায়। অসুবিধাগুলি নির্ভরতা ইনজেকশনের সমালোচকরা যুক্তি দেন যে এটি এমন ক্লায়েন্ট তৈরি করে যা কনফিগারেশন বিবরণ দাবি করে, যা সুস্পষ্ট ডিফল্টগুলি উপলব্ধ হলে কঠিন হতে পারে। কোডটি সনাক্ত করা কঠিন করে তোলে কারণ এটি আচরণকে নির্মাণ থেকে পৃথক করে। সাধারণত প্রতিফলন বা গতিশীল প্রোগ্রামিং দিয়ে প্রয়োগ করা হয়, যা আইডিই অটোমেশনে বাধা দেয়। সাধারণত আরও অগ্রগতির প্রচেষ্টা প্রয়োজন। একটি কাঠামোর উপর নির্ভরশীলতাকে উৎসাহিত করে। ডিপেন্ডেন্সি ইনজেকশনের প্রকার তিনটি প্রধান উপায় রয়েছে যার মাধ্যমে একজন গ্রাহক ইনজেকশন পরিষেবা পেতে পারেনঃ কনস্ট্রাক্টর ইনজেকশন, যেখানে ক্লায়েন্টের ক্লাস কনস্ট্রাক্টরের মাধ্যমে নির্ভরতা প্রদান করা হয়। সেটার ইনজেকশন, যেখানে ক্লায়েন্ট একটি সেটার পদ্ধতি প্রকাশ করে যা নির্ভরতা গ্রহণ করে। ইন্টারফেস ইনজেকশন, যেখানে নির্ভরতার ইন্টারফেস একটি ইনজেক্টর পদ্ধতি প্রদান করে যা যে কোনও ক্লায়েন্টের কাছে নির্ভরশীলতাকে প্রবেশ করাবে। কিছু কাঠামোতে, গ্রাহকদের সক্রিয়ভাবে নির্ভরতা ইনজেকশন গ্রহণ করার প্রয়োজন হয় না। উদাহরণস্বরূপ, জাভাতে, প্রতিফলন সরাসরি পরিষেবাগুলি পরীক্ষা এবং ইনজেকশনের সময় ব্যক্তিগত বৈশিষ্ট্যগুলি জনসমক্ষে প্রকাশ করতে পারে। ডিপেন্ডেন্সি ইনজেকশন ছাড়াই নিম্নলিখিত জাভা উদাহরণে, ক্লায়েন্ট ক্লাসে কনস্ট্রাক্টরে আরম্ভকৃত একটি পরিষেবা সদস্য পরিবর্তনশীল রয়েছে। ক্লায়েন্ট সরাসরি তৈরি করে এবং নিয়ন্ত্রণ করে যে এটি কোন পরিষেবা ব্যবহার করে, একটি হার্ড-কোডেড নির্ভরতা তৈরি করে। পাবলিক ক্লাস ক্লায়েন্ট {বেসরকারী পরিষেবা পরিষেবা; ক্লায়েন্ট () {// নির্ভরতা হার্ড-কোডেড। this.service = নতুন উদাহরণ পরিষেবা ();}} কনস্ট্রাক্টর ইনজেকশন নির্ভরতা ইনজেকশনের সবচেয়ে সাধারণ রূপ হল একটি শ্রেণীর জন্য তার কনস্ট্রাক্টরের মাধ্যমে তার নির্ভরশীলতার অনুরোধ করা। এটি নিশ্চিত করে যে ক্লায়েন্ট সর্বদা একটি বৈধ অবস্থায় থাকে, কারণ এটি তার প্রয়োজনীয় নির্ভরতা ছাড়া তাত্ক্ষণিকভাবে প্রমাণিত হতে পারে না। পাবলিক ক্লাস ক্লায়েন্ট {বেসরকারী পরিষেবা পরিষেবা;// নির্ভরতা একটি কনস্ট্রাক্টরের মাধ্যমে ইনজেকশন দেওয়া হয়। ক্লায়েন্ট (পরিষেবা পরিষেবা) {যদি (পরিষেবা = = অকার্যকর) {নতুন অবৈধ আর্গুমেন্ট এক্সসেপশন নিক্ষেপ করে ("পরিষেবা অবশ্যই অকার্যকর হতে হবে না");} this.service = পরিষেবা;}} সেটার ইনজেকশন কনস্ট্রাক্টরের পরিবর্তে সেটার পদ্ধতির মাধ্যমে নির্ভরতা গ্রহণ করে, ক্লায়েন্টরা যে কোনও সময় ইনজেক্টরদের তাদের নির্ভরতা পরিচালনা করার অনুমতি দিতে পারে। এটি নমনীয়তা প্রদান করে, তবে ক্লায়েন্ট ব্যবহার করার আগে সমস্ত নির্ভরতা ইনজেকশন এবং বৈধ কিনা তা নিশ্চিত করা কঠিন করে তোলে। পাবলিক ক্লাস ক্লায়েন্ট {বেসরকারী পরিষেবা পরিষেবা;// নির্ভরতা একটি সেটার পদ্ধতির মাধ্যমে ইনজেকশন দেওয়া হয়। সর্বজনীন অকার্যকর সেট সার্ভিস (পরিষেবা পরিষেবা) {যদি (পরিষেবা = = অকার্যকর) {নতুন অবৈধ আর্গুমেন্ট এক্সসেপশন নিক্ষেপ করুন ("পরিষেবা অবশ্যই অকার্যকর হবে না");} this.service = পরিষেবা;} ইন্টারফেস ইনজেকশন ইন্টারফেস ইনজেকশনের সাথে, নির্ভরশীলরা তাদের ক্লায়েন্টদের সম্পর্কে সম্পূর্ণ অজ্ঞ, তবুও নতুন ক্লায়েন্টদের রেফারেন্স পাঠায় এবং গ্রহণ করে। এইভাবে, নির্ভরতা ইনজেক্টর হয়ে ওঠে। মূল বিষয়টি হল ইনজেকশন পদ্ধতিটি একটি ইন্টারফেসের মাধ্যমে সরবরাহ করা হয়। ক্লায়েন্ট এবং তার নির্ভরশীলতার পরিচয় করিয়ে দেওয়ার জন্য এখনও একটি অ্যাসেম্বলারের প্রয়োজন। অ্যাসেম্বলার ক্লায়েন্টের কাছে একটি রেফারেন্স নেয়, সেটার ইন্টারফেসে ফেলে দেয় যা সেই নির্ভরতা নির্ধারণ করে এবং এটিকে সেই নির্ভরতা বস্তুর কাছে প্রেরণ করে যা ক্লায়েন্টের কাছে নিজের কাছে একটি রেফারেন্স প্রেরণ করে। ইন্টারফেস ইনজেকশনের মূল্য থাকার জন্য, নির্ভরশীলতাকে কেবল নিজের কাছে একটি রেফারেন্স ফিরিয়ে দেওয়ার পাশাপাশি কিছু করতে হবে। এটি অন্যান্য নির্ভরতা সমাধানের জন্য একটি কারখানা বা উপ-সমাবেশকারী হিসাবে কাজ করতে পারে, এইভাবে প্রধান সমাবেশকারী থেকে কিছু বিবরণ বিমূর্ত করে। এটি রেফারেন্স-গণনা হতে পারে যাতে নির্ভরশীলতা জানতে পারে যে কতজন ক্লায়েন্ট এটি ব্যবহার করছে। যদি নির্ভরতা ক্লায়েন্টদের একটি সংগ্রহ বজায় রাখে, তবে এটি পরে তাদের সবাইকে নিজের একটি ভিন্ন উদাহরণ দিয়ে ইনজেকশন দিতে পারে। পাবলিক ইন্টারফেস সার্ভিসসেটার {অকার্যকর সেট সার্ভিস (পরিষেবা পরিষেবা);} পাবলিক ক্লাস ক্লায়েন্ট সার্ভিসসেটার (ব্যক্তিগত পরিষেবা পরিষেবা) প্রয়োগ করে; @Override পাবলিক অকার্যকর সেট সার্ভিস (পরিষেবা পরিষেবা) {যদি (পরিষেবা = অকার্যকর) {নতুন অবৈধ যুক্তি ছাড় দিন ("পরিষেবা অবশ্যই অকার্যকর হবে না");} this.service = পরিষেবা;} পাবলিক ক্লাস সার্ভিস ইনজেক্টর {প্রাইভেট ফাইনাল সেট <সার্ভিসসেটার> ক্লায়েন্ট = নতুন হ্যাশসেট <> (); পাবলিক অকার্যকর ইনজেকশন (সার্ভিসসেটার ক্লায়েন্ট) {this.clients.add (ক্লায়েন্ট); client.setService (নতুন উদাহরণ পরিষেবা ();} পাবলিক অকার্যকর সুইচ () পাবলিক ক্লাস প্রোগ্রাম {পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং [] আর্গস) {// পরিষেবাটি তৈরি করুন। পরিষেবা পরিষেবা = নতুন উদাহরণ পরিষেবা ();// ক্লায়েন্টের মধ্যে পরিষেবাটি প্রবেশ করান। ক্লায়েন্ট ক্লায়েন্ট = নতুন ক্লায়েন্ট (পরিষেবা);// বস্তুগুলি ব্যবহার করুন। ম্যানুয়াল নির্মাণ আরও জটিল হতে পারে এবং এতে নির্মাতা, কারখানা বা অন্যান্য নির্মাণ নিদর্শন জড়িত থাকতে পারে। ফ্রেমওয়ার্ক ম্যানুয়াল নির্ভরতা ইনজেকশন প্রায়শই ক্লান্তিকর এবং বৃহত্তর প্রকল্পগুলির জন্য ত্রুটি-প্রবণ, যা প্রক্রিয়াটিকে স্বয়ংক্রিয় করে এমন কাঠামোর ব্যবহারকে প্রচার করে। ম্যানুয়াল নির্ভরতা ইনজেকশন একটি নির্ভরতা ইনজেকশন কাঠামো হয়ে ওঠে যখন বিল্ডিং কোডটি আর অ্যাপ্লিকেশনের জন্য কাস্টম হয় না এবং পরিবর্তে সর্বজনীন হয়। দরকারী হলেও, নির্ভরতা ইনজেকশন দেওয়ার জন্য এই সরঞ্জামগুলির প্রয়োজন হয় না। কিছু কাঠামো, যেমন স্প্রিং, প্রোগ্রামের গঠন পরিকল্পনা করতে বাহ্যিক কনফিগারেশন ফাইল ব্যবহার করতে পারেঃ আমদানি org.springframework.beans.factory.BeanFactory; আমদানি org.springframework.context.ApplicationContext; আমদানি org.springframework.context.support.ClassPathXmlApplicationContext; পাবলিক ক্লাস ইনজেক্টর {পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং [] আর্গস) {// কোন কংক্রিট পরিষেবা ব্যবহার করতে হবে সে সম্পর্কে বিশদ প্রোগ্রাম থেকে আলাদা কনফিগারেশনে সংরক্ষণ করা হয়। BeanFactery beanfactery = new ClassPathXml অ্যাপ্লিকেশন প্রসঙ্গ ("Beans.xml"); ক্লায়েন্ট ক্লায়েন্ট = (ক্লায়েন্ট) beanfactory.getBean ("ক্লায়েন্ট"); System.out.println (client.greet ();} এমনকি একটি সম্ভাব্য দীর্ঘ এবং জটিল অবজেক্ট গ্রাফ সহ, কোডে উল্লিখিত একমাত্র শ্রেণী হল প্রবেশ বিন্দু, এই ক্ষেত্রে Client.Client স্প্রিং-এর সাথে কাজ করার জন্য কোনও পরিবর্তন হয়নি এবং একটি পিওজেও রয়ে গেছে। বসন্ত-নির্দিষ্ট টীকা এবং কলগুলি অনেক শ্রেণীর মধ্যে ছড়িয়ে পড়া থেকে বিরত রেখে, সিস্টেমটি কেবল বসন্তের উপর নির্ভরশীল থাকে। উদাহরণ অ্যাঙ্গুলারজেএস নিম্নলিখিত উদাহরণটি দেখায় যে একটি অ্যাঙ্গুলারজেএস উপাদান নির্ভরতা ইনজেকশনের মাধ্যমে অভিবাদন পরিষেবা গ্রহণ করছে। ফাংশন সামক্লাস (অভিবাদনকারী) {this.greeter = অভিবাদনকারী;} SomeClass.prototype.doSomething = ফাংশন (নাম) {this.greeter.greet (নাম);} প্রতিটি অ্যাঙ্গুলারজেএস অ্যাপ্লিকেশন নির্ভরশীলতার নির্মাণ এবং সন্ধানের জন্য দায়ী একটি পরিষেবা লোকেটর ধারণ করে। //ওয়ার মাই মডুলে তারের তথ্য প্রদান করুন = angular.module ('মাই মডুলে', []);// ইনজেক্টরকে কীভাবে অভিবাদন পরিষেবা তৈরি করতে হয় তা শেখান। //অভিবাদনকারী $উইন্ডো পরিষেবার উপর নির্ভরশীল। myModule.factory ('অভিবাদনকারী', ফাংশন ($উইন্ডো) {রিটার্ন {গ্রিটঃ ফাংশন (টেক্সট) {$window.alert (টেক্সট);}};}); তারপর আমরা একটি নতুন ইনজেক্টর তৈরি করতে পারি যা অভিবাদনকারী পরিষেবা সহ মাইমডিউল মডিউলে সংজ্ঞায়িত উপাদানগুলি সরবরাহ করে। ভার ইনজেক্টর = angular.injector (['মাই মডিউল', 'ng']); ভার অভিবাদনকারী = injector.get ('অভিবাদনকারী'); সার্ভিস লোকেটর অ্যান্টিপ্যাটারন এড়াতে, অ্যাঙ্গুলারজেএস এইচটিএমএল টেমপ্লেটগুলিতে ঘোষণাত্মক স্বরলিপির অনুমতি দেয় যা ইনজেক্টরের উপাদানগুলি তৈরি করে। <ডিভ এনজি-কন্ট্রোলার = "মাইকন্ট্রোলার"> <বোতাম এনজি-ক্লিক = "সেহেলো ()"> হ্যালো </বোতাম> </ডিভ> ফাংশন মাইকন্ট্রোলার ($সুযোগ, অভিবাদন) {$scope.sayHello = ফাংশন () {greeter.greet ('হ্যালো ওয়ার্ল্ড');};} এনজি-কন্ট্রোলার নির্দেশিকা নিয়ন্ত্রক এবং তার নির্ভরশীলতার একটি উদাহরণ তৈরি করতে ইনজেক্টরকে ট্রিগার করে। সি #এই নমুনাটি সি #-এ কনস্ট্রাক্টর ইনজেকশনের একটি উদাহরণ প্রদান করে। সিস্টেম ব্যবহার করে; নেমস্পেস ডিপেন্ডেন্সি ইনজেকশন;// আমাদের ক্লায়েন্ট শুধুমাত্র এই ইন্টারফেস সম্পর্কে জানবে, কোন নির্দিষ্ট গেমপ্যাড ব্যবহার করছে তা নয়। ইন্টারফেস আইগেমপ্যাড ফাংশনালিটি {স্ট্রিং গেটগেমপ্যাডনাম (); অকার্যকর সেটভাইব্রেশনপাওয়ার (ফ্লোট পাওয়ার);}// নিম্নলিখিত পরিষেবাগুলি উপরের ইন্টারফেসের সুনির্দিষ্ট বাস্তবায়ন প্রদান করে। ক্লাস এক্সবক্সগেমপ্যাডঃ আইগেমপ্যাড ফাংশনালিটি {ফ্লোট ভাইব্রেশনপাওয়ার = 1.0এফ; পাবলিক স্ট্রিং গেটগেমপ্যাডনাম () => "এক্সবক্স কন্ট্রোলার"; পাবলিক অকার্যকর সেটভাইব্রেশনপাওয়ার (ফ্লোট পাওয়ার) => this.vibrationPower = Math.Clamp (পাওয়ার, 0.0এফ, 1.0এফ);} ক্লাস প্লেস্টেশনজয়স্টিকঃ আইগেমপ্যাড ফাংশনালিটি {ফ্লোট ভাইব্রেটিংপাওয়ার = 100.0f; পাবলিক স্ট্রিং গেটগেমপ্যাডনাম () => "প্লেস্টেশন কন্ট্রোলার"; পাবলিক অকার্যকর সেটভাইব্রেশনপাওয়ার (ফ্লোট পাওয়ার) => this.vibratingPower = Math.Clamp (পাওয়ার * 100.0f, 0.0এফ, 100.0f) ক্লাস গেমপ্যাড {আইগেমপ্যাড ফাংশনালিটি গেমপ্যাড ফাংশনালিটি;// পরিষেবাটি কনস্ট্রাক্টরের মাধ্যমে ইনজেকশন দেওয়া হয় এবং উপরের ক্ষেত্রে সংরক্ষণ করা হয়। সর্বজনীন গেমপ্যাড (আইগেমপ্যাড-কার্যকারিতা গেমপ্যাড-কার্যকারিতা) => this.gamepadFunctionality = গেমপ্যাড-কার্যকারিতা; সর্বজনীন অকার্যকর শোকেস () {// ইনজেকশন পরিষেবা ব্যবহার করা হয়। ভার গেমপ্যাড নাম = this.gamepadFunctionality.GetGamepadName (); ভার বার্তা = $"আমরা এখন {গেমপ্যাড নাম} ব্যবহার করছি, আপনি কি কম্পন শক্তি পরিবর্তন করতে চান? "; Console.WriteLine (বার্তা);}} শ্রেণী প্রোগ্রাম {স্ট্যাটিক অকার্যকর মেইন () {ভার স্টিমকন্ট্রোলার = নতুন স্টিমকন্ট্রোলার ();// আমরা একটি এক্সবক্সকন্ট্রোলার, প্লেস্টেশন জয়স্টিক ইত্যাদিতেও উত্তীর্ণ হতে পারতাম। //গেমপ্যাড জানে না যে এটি কী ব্যবহার করছে এবং তার প্রয়োজনও নেই। ওয়ার গেমপ্যাড = নতুন গেমপ্যাড (স্টিমকন্ট্রোলার); gamepad.Showcase ();} আরও দেখুন স্থাপত্য বিবরণ ভাষা ফ্যাক্টরি প্যাটার্ন নিয়ন্ত্রণের বিপরীতমুখী প্লাগ-ইন (কম্পিউটিং) কৌশল প্যাটার্ন অ্যাঙ্গুলারজেএস সার্ভিস লোকেটর প্যাটার্ন প্যারামিটার (কম্পিউটার প্রোগ্রামিং) কোয়াজেক্ট রেফারেন্স বাহ্যিক লিঙ্ক মার্ক সিম্যানের কম্পোজিশন রুট একটি প্রাথমিক গাইড নির্ভরতা ইনজেকশন নির্ভরতা ইনজেকশন এবং পরীক্ষামূলক বস্তুগুলির জন্যঃ আলগাভাবে সংযুক্ত এবং পরীক্ষামূলক বস্তুর নকশা করা-জেরেমি ওয়েইস্কটেন; ড. ডবস জার্নাল, মে 2006। ডিজাইন প্যাটার্নঃ ডিপেন্ডেন্সি ইনজেকশন-এমএসডিএন ম্যাগাজিন, সেপ্টেম্বর 2005 মার্টিন ফাউলারের মূল নিবন্ধ যা ইএএ-এর ডিপেন্ডেন্সি ইনজেকশন পিঃ প্লাগইন দ্য রিচ ইঞ্জিনিয়ারিং হেরিটেজ বিহাইন্ড ডিপেন্ডেন্সি ইনজেকশন-অ্যান্ড্রু ম্যাকভি-ডিপেন্ডেন্সি ইনজেকশনের একটি বিস্তারিত ইতিহাস শব্দটি প্রবর্তন করেছে। ডিপেন্ডেন্সি ইনজেকশন কী? - একটি বিকল্প ব্যাখ্যা-জ্যাকব জেনকভ ডিপেন্ডেন্সি ইনজেকশন সহ আরও পরীক্ষামূলক কোড লিখছেন-- Developer.com, অক্টোবর 2006 পরিচালিত এক্সটেনসিবিলিটি ফ্রেমওয়ার্ক ওভারভিউ-- এমএসডিএন হান্ট 1998 রিফ্যাক্টর ইউর ওয়ে টু এ ডিপেন্ডেন্সি ইনজেকশন কনটেইনার দ্বারা ডিপেন্ডেন্সি মেকানিজমের পুরানো ফ্যাশন বর্ণনা পিএইচপিতে ডিআই বোঝা আপনার ডিপেন্ডেন্সি ইনজেকশন কনটেইনার উপাদান-ভিত্তিক সফ্টওয়্যার ইঞ্জিনিয়ারিং সফ্টওয়্যার আর্কিটেকচার ডিজাইন প্যাটার্নের প্রয়োজন নেই উদাহরণস্বরূপ জাভা কোড সহ নিবন্ধ