উভয় নিদর্শন নিয়ন্ত্রণের বিপরীতার নীতি বাস্তবায়নের মত বলে মনে হচ্ছে। এটি হল, যে কোনও অবজেক্টের তার নির্ভরতাগুলি কীভাবে তৈরি করা উচিত তা জানা উচিত নয়।
নির্ভরতা ইনজেকশন (ডিআই) এটির নির্ভরতা "ইনজেকশন" করতে কোনও নির্মাণকারী বা সেটার ব্যবহার করেছে।
কনস্ট্রাক্টর ইনজেকশন ব্যবহারের উদাহরণ:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
পরিষেবা লোকেটার মনে হয় একটি "ধারক" ব্যবহার করে, যা এর নির্ভরশীলতাগুলিকে বাড়িয়ে তোলে এবং এটির বার দেয়।
পরিষেবা লোকেটার ব্যবহারের উদাহরণ:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
যেহেতু আমাদের নির্ভরতা কেবল নিজেরাই অবজেক্টস, এই নির্ভরতাগুলির মধ্যে নির্ভরতা রয়েছে, যার আরও বেশি নির্ভরতা রয়েছে, এবং আরও অনেক কিছু। সুতরাং, কন্ট্রোল কনভার্টারের (বা ডিআই কনটেইনার) জন্ম হয়েছিল। উদাহরণ: ক্যাসল উইন্ডসর, নিনেক্ট, স্ট্রাকচার ম্যাপ, স্প্রিং ইত্যাদি)
কিন্তু একটি আইওসি / ডিআই কনটেইনার দেখায় ঠিক একটি পরিষেবা লোকেটার মত। এটি কোনও ডিআই কনটেইনারকে খারাপ নাম বলছে? কোনও আইওসি / ডিআই কনটেইনার কি কেবল অন্য ধরণের পরিষেবা লোকেটার? আমাদের অনেক নির্ভরতা থাকাকালীন আমরা ডিআই কনটেইনারগুলি ব্যবহার করি না কেন সেই বিষয়টি অবলম্বন করে?