আমি কোনও বিশেষজ্ঞ নই, তবে আমি মনে করি আমি সাহায্য করতে পারি। এবং হ্যাঁ, এটি নির্ভরশীল ইঞ্জেকশনের একটি নির্দিষ্ট ধরণের।
দাবি অস্বীকার : এই প্রায় সবগুলিই নিনেক্ট উইকি থেকে "চুরি" হয়েছিল
আসুন একটি সহজ উদাহরণ দিয়ে হাঁটা দিয়ে নির্ভরতা ইনজেকশন ধারণাটি পরীক্ষা করি। ধরা যাক আপনি পরবর্তী ব্লকবাস্টার গেমটি লিখছেন, যেখানে মহৎ যোদ্ধারা দুর্দান্ত গৌরব অর্জনের জন্য যুদ্ধ করে। প্রথমত, আমাদের আমাদের যোদ্ধাদের সশস্ত্র করার জন্য উপযুক্ত একটি অস্ত্রের প্রয়োজন হবে।
class Sword
{
public void Hit(string target)
{
Console.WriteLine("Chopped {0} clean in half", target);
}
}
তারপরে, আসুন আমরা আমাদের যোদ্ধাদের উপস্থাপনের জন্য একটি শ্রেণি তৈরি করি। এর শত্রুদের আক্রমণ করার জন্য, যোদ্ধার একটি আক্রমণ () পদ্ধতি প্রয়োজন need এই পদ্ধতিটি যখন ডাকা হয় তখন তার তরোয়ালটি প্রতিপক্ষকে আঘাত করার জন্য ব্যবহার করা উচিত use
class Samurai
{
readonly Sword sword;
public Samurai()
{
this.sword = new Sword();
}
public void Attack(string target)
{
this.sword.Hit(target);
}
}
এখন, আমরা আমাদের সামুরাই তৈরি করতে পারি এবং যুদ্ধ করতে পারি!
class Program
{
public static void Main()
{
var warrior = new Samurai();
warrior.Attack("the evildoers");
}
}
আপনি যেমন কল্পনা করতে পারেন, এটি চ্যাপ্ট করা দুষ্টুদের কনসোলে অর্ধেকে পরিষ্কার করবে । এটি ঠিক কাজ করে, তবে যদি আমরা আমাদের সামুরাইকে অন্য একটি অস্ত্র দিয়ে সজ্জিত করতে চাই? যেহেতু তরোয়ালটি সামুরাই শ্রেণীর নির্মাণকারীর ভিতরে তৈরি করা হয়েছে, তাই এই পরিবর্তনটি আনতে আমাদের ক্লাসের প্রয়োগটি পরিবর্তন করতে হবে।
যখন কোনও শ্রেণি একটি কংক্রিট নির্ভরতার উপর নির্ভরশীল হয় তখন বলা হয় এটি দৃ class ়ভাবে class শ্রেণীর সাথে মিলিত হয়েছে । এই উদাহরণে, সামুরাই ক্লাসটি তরোয়াল শ্রেণিতে শক্তভাবে মিলিত হয়েছে। যখন ক্লাসগুলি দৃly়ভাবে একত্রিত হয়, তাদের প্রয়োগের পরিবর্তন না করে সেগুলি আদান প্রদান করা যায় না। দৃ classes়ভাবে সংযোজন ক্লাস এড়ানোর জন্য, আমরা ইন্টারফেসগুলি ইন্ডিয়ারেশনের একটি স্তর সরবরাহ করতে পারি। আসুন আমাদের গেমের একটি অস্ত্র প্রতিনিধিত্ব করার জন্য একটি ইন্টারফেস তৈরি করুন।
interface IWeapon
{
void Hit(string target);
}
তারপরে, আমাদের তরোয়াল শ্রেণি এই ইন্টারফেসটি প্রয়োগ করতে পারে:
class Sword : IWeapon
{
public void Hit(string target)
{
Console.WriteLine("Chopped {0} clean in half", target);
}
}
এবং আমরা আমাদের সামুরাই ক্লাস পরিবর্তন করতে পারি:
class Samurai
{
readonly IWeapon weapon;
public Samurai()
{
this.weapon = new Sword();
}
public void Attack(string target)
{
this.weapon.Hit(target);
}
}
এখন আমাদের সামুরাই বিভিন্ন অস্ত্র দিয়ে সজ্জিত হতে পারে। কিন্তু অপেক্ষা করো! তরোয়ালটি এখনও সামুরাই নির্মাণকারীর ভিতরে তৈরি করা হয়েছে। যেহেতু আমাদের যোদ্ধাকে অন্য একটি অস্ত্র দেওয়ার জন্য আমাদের সামুরাইয়ের বাস্তবায়নে পরিবর্তন আনতে হবে, তবুও সামুরাই তরোয়ার সাথে শক্তভাবে মিলিত led
ভাগ্যক্রমে, একটি সহজ সমাধান আছে। সামুরাইয়ের কনস্ট্রাক্টরের মধ্যে থেকে তরোয়ালটি তৈরি করার পরিবর্তে আমরা এটির পরিবর্তে কনস্ট্রাক্টরের প্যারামিটার হিসাবে প্রকাশ করতে পারি। কনস্ট্রাক্টর ইনজেকশন নামেও পরিচিত।
class Samurai
{
readonly IWeapon weapon;
public Samurai(IWeapon weapon)
{
this.weapon = weapon;
}
public void Attack(string target)
{
this.weapon.Hit(target);
}
}
জর্জিও যেমন উল্লেখ করেছেন, সেখানে রয়েছে সম্পত্তি ইনজেকশনও। এটি এমন কিছু হবে:
class Samurai
{
IWeapon weapon;
public Samurai() { }
public void SetWeapon(IWeapon weapon)
{
this.weapon = weapon;
}
public void Attack(string target)
{
this.weapon.Hit(target);
}
}
আশাকরি এটা সাহায্য করবে.