ঠিক আছে, প্রথমে বন্ধ করুন, "নতুন নির্ভরতা যুক্ত হওয়ার সাথে সাথে কোডারকে কল করা যে কোনও কোড আপডেট করার দরকার পড়বে"; স্পষ্টতই, যদি আপনি নির্ভরতা ইনজেকশন করছেন এবং নির্ভরতার সাথে কোনও বস্তুতে আপনার কাছে নতুন () কল করার কোনও কোড রয়েছে, আপনি এটি ভুল করছেন ।
আপনার ডিআই কনটেইনারটি সমস্ত প্রাসঙ্গিক নির্ভরশীলতাগুলি ইনজেকশনে সক্ষম হতে হবে, তাই আপনাকে কনস্ট্রাক্টর স্বাক্ষর পরিবর্তন করার বিষয়ে চিন্তা করার দরকার নেই, যাতে যুক্তিটি সত্যই ধরে না।
প্রতি-পদ্ধতি বনাম প্রতি ক্লাস ইনজেকশন ধারণা হিসাবে, প্রতি-পদ্ধতিতে ইঞ্জেকশন নিয়ে দুটি বড় সমস্যা রয়েছে।
একটি বিষয় হ'ল আপনার শ্রেণীর পদ্ধতিগুলি নির্ভরতা ভাগ করে নেওয়া উচিত, আপনার ক্লাসগুলি কার্যকরভাবে পৃথক করা হয়েছে তা নিশ্চিত করার জন্য এটির একটি উপায়, যদি আপনি প্রচুর পরিমাণে নির্ভরশীলতা (সম্ভবত 4-5 এর বেশি) সহ একটি শ্রেণি দেখেন তবে সেই শ্রেণিটি প্রধান প্রার্থী দুটি ক্লাসে রিফ্যাকচারিংয়ের জন্য।
পরবর্তী সমস্যাটি হ'ল প্রতি-পদ্ধতিতে নির্ভরতাগুলি "ইনজেকশন" করতে, আপনাকে সেগুলি পদ্ধতি কলের মধ্যে প্রেরণ করতে হবে। এর অর্থ হল যে পদ্ধতি কলের আগে আপনাকে নির্ভরতাগুলি সমাধান করতে হবে, সুতরাং আপনি সম্ভবত কোডের একগুচ্ছ দিয়ে শেষ করবেন:
var someDependency = ServiceLocator.Resolve<ISomeDependency>();
var something = classBeingInjected.DoStuff(someDependency);
এখন, বলুন যে আপনি আপনার অ্যাপ্লিকেশনটির আশেপাশে 10 জায়গায় এই পদ্ধতিটি কল করতে চলেছেন: আপনার কাছে এই 10 টি স্নিপেট থাকবে। এরপরে, বলুন যে আপনাকে ডস্ট স্টাফের () আরও একটি নির্ভরতা যুক্ত করতে হবে: আপনাকে সেই স্নিপেটটি 10 বার পরিবর্তন করতে হবে (বা কোনও পদ্ধতিতে এটি মোড়ানো হবে) এই ক্ষেত্রে আপনি কেবল ডিআই আচরণটি ম্যানুয়ালি প্রতিলিপি করছেন, যা নষ্ট সময়)।
সুতরাং, আপনি সেখানে মূলত যা করেছেন তা আপনার ডিআই-ব্যবহারকারী শ্রেণিকে তাদের নিজস্ব ডিআই কনটেইনার সম্পর্কে সচেতন করে তুলেছে, যা একটি মৌলিকভাবে খারাপ ধারণা , কারণ এটি খুব তাড়াতাড়ি একটি ক্লানকি ডিজাইনের দিকে পরিচালিত করে যা বজায় রাখা কঠিন।
কনস্ট্রাক্টর ইঞ্জেকশনের সাথে এর তুলনা করুন; কনস্ট্রাক্টর ইনজেকশনে আপনি কোনও নির্দিষ্ট ডিআই কনটেইনার সাথে আবদ্ধ হন না এবং আপনি কখনই আপনার ক্লাসের নির্ভরতা পূরণের জন্য সরাসরি দায়বদ্ধ হন না, তাই রক্ষণাবেক্ষণ মোটামুটি মাথা ব্যথা মুক্ত is
আমার কাছে মনে হচ্ছে আপনি আইওসিটিকে এমন এক শ্রেণীর সাথে সম্পর্কিত করতে পারেন না যা সম্পর্কিত সম্পর্কহীন সহায়তার পদ্ধতিগুলির একটি গোছা রয়েছে, তবে আপনি সহায়তার বর্গকে বিভিন্ন ভিত্তিতে পরিষেবা ক্লাসে বিভক্ত করা, এবং তারপরে সহায়তা প্রদানকারীকে প্রতিনিধি হিসাবে ব্যবহার করে আরও ভাল হতে পারেন কল। এটি এখনও দুর্দান্ত পন্থা নয় (সাহায্যকারী এমন পদ্ধতিগুলির সাথে জড়িত যা আরও জটিল কিছু করে যেগুলি যুক্তিগুলি যেগুলি তাদের কাছে পৌঁছেছে তা সাধারণত খারাপভাবে লিখিত পরিষেবা ক্লাসগুলি থেকে ডিল করে) তবে এটি কমপক্ষে আপনার নকশাকে কিছুটা পরিষ্কার রাখবে ।
(এনবি আমি আপনার আগে যে পদ্ধতির পরামর্শ দিচ্ছিলাম তা করেছি এবং এটি আমার পক্ষে খুব খারাপ ধারণা ছিল যা আমি এর পরে পুনরাবৃত্তি করি নি Turn ইন্টারফেসগুলির একটি সেট সহ যেখানে প্রতিটি পদ্ধতি কলটিতে অন্যান্য ইন্টারফেসগুলির একটি কাছাকাছি স্থির নির্বাচন প্রয়োজন maintain এটি বজায় রাখা দুঃস্বপ্ন।)