আমি মনে করি আপনার ভিত্তি এখানে কিছুটা বিভ্রান্ত, আপনি কারখানায় ইনজেকশন দেওয়ার কথা বলছেন, তবে কারখানার প্যাটার্নটি একটি ক্রিয়েটিশাল প্যাটার্ন যার উদ্দেশ্য ছিল নির্ভরতা ইনজেকশন কাঠামোটি কী করে তার একটি উপসেট করানো, যখন ডিআই ফ্রেমওয়ার্কগুলি এই প্যাটার্নটি প্রচলিত ছিল না was যে কারণে দরকারী। তবে আপনার যদি ডিআই কাঠামো থাকে তবে আপনার আর সত্যিই কারখানার দরকার নেই কারণ ডিআই কাঠামোটি কারখানার উদ্দেশ্য পূরণ করতে পারে।
এটি বলেছিল, নির্ভরতা ইনজেকশন এবং আপনি সাধারণত কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে আমাকে কিছুটা ব্যাখ্যা করতে দিন।
নির্ভরতা ইনজেকশন করার বিভিন্ন উপায় রয়েছে তবে সর্বাধিক সাধারণ হ'ল কনস্ট্রাক্টর ইঞ্জেকশন, সম্পত্তি ইনজেকশন এবং সরাসরি ডাইকন্টেইনার। আমি কনস্ট্রাক্টর ইনজেকশন সম্পর্কিত কথা বলব কারণ সম্পত্তি ইনজেকশন বেশিরভাগ সময়ই ভুল পদ্ধতির (বেশ কয়েকটি সময় সঠিক পন্থা) হয় এবং আপনি যখন অন্য পদ্ধতির কোনওটিই করতে না পারেন তবে ডিকন্টেইনার অ্যাক্সেস পছন্দনীয় নয়।
কনস্ট্রাক্টর ইনজেকশনটি এমন যেখানে আপনার নির্ভরতা এবং একটি ডাইকন্টেইনার (বা কারখানা) এর ইন্টারফেস রয়েছে যা সেই নির্ভরতার জন্য কংক্রিট বাস্তবায়ন জানে এবং যেখানেই আপনার প্রয়োজন হয় এমন কোনও বস্তুর প্রয়োজন যা সেই ইন্টারফেসের উপর নির্ভর করে, নির্মাণের সময় আপনি কারখানা থেকে বাস্তবায়ন হস্তান্তর করেন এটা।
অর্থাত
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
অনেক ডিআই ফ্রেমওয়ার্কগুলি এটিকে উল্লেখযোগ্যভাবে সরল করতে পারে যেখানে আপনার ডাইকন্টেইনার ইউজাররপোজিটরির নির্ধারককে ইন্টারফেসের জন্য এটি পরিদর্শন করবে যেখানে এটি কংক্রিট বাস্তবায়ন জানে, এবং স্বয়ংক্রিয়ভাবে সেগুলি আপনার কাছে এনে দেবে; এই কৌশলটি প্রায়শই ইনভার্শন অফ কন্ট্রোল বলা হয়, যদিও ডিআই এবং আইওসি উভয় পদ যা প্রচুর পরিমাণে আন্তঃবর্ণ হয় এবং অস্পষ্ট (যদি থাকে) পার্থক্য থাকে।
এখন আপনি যদি ভাবছেন যে কীভাবে ওভাররিচিং কোড ডিকন্টেইনারকে অ্যাক্সেস করে, ভাল আপনি এটিতে অ্যাক্সেসের জন্য একটি স্ট্যাটিক ক্লাস রাখতে পারেন বা এর চেয়ে বেশি উপযুক্ত এটি হ'ল বেশিরভাগ ডিআই ফ্রেমওয়ার্ক আপনাকে একটি ডিকন্টেইনার নতুন করার অনুমতি দেয়, যেখানে এটি আসলে ঠিক যেমন আচরণ করবে এটি প্রদত্ত ইন্টারফেসগুলির জন্য কংক্রিট হতে পারে এমন প্রকারগুলির জন্য একটি অভ্যন্তরীণ সিঙ্গলটন অভিধানে একটি মোড়ক।
এর অর্থ, আপনি কোডটিতে যে কোনও জায়গায় ডিকন্টেইনারকে নতুন করতে পারেন এবং কার্যকরভাবে একই ইন্টারফেস-টু-কংক্রিটের সম্পর্কগুলি জানার জন্য কনফিগার করেছেন এমন একই ডিকন্টেইনারটি পেতে পারেন। কোডের অংশগুলি থেকে ডাইসকন্টেইনারকে আড়াল করার সাধারণ উপায় যা সরাসরি এটির সাথে ইন্টারঅ্যাক্ট না করে তা হ'ল কেবলমাত্র প্রয়োজনীয় প্রকল্প (গুলি) এর ডিআই কাঠামোর একটি রেফারেন্স রয়েছে তা নিশ্চিত করা।