Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন, যা অ্যাপ্লিকেশনগুলিতে ক্লাসের মধ্যে নির্ভরতা (dependencies) ইনজেক্ট করার একটি পদ্ধতি। এর মাধ্যমে কোডে নমনীয়তা, টেস্টেবিলিটি এবং রিইউজেবিলিটি বৃদ্ধি পায়। .NET Core এ Dependency Injection ব্যবহারের জন্য একটি বিল্ট-ইন সুবিধা রয়েছে, যা ডেভেলপারদের কমপ্লেক্স ডিপেনডেন্সি ম্যানেজমেন্টে সহায়তা করে।
Dependency Injection মূলত একটি কৌশল, যা ম্যানুয়ালি নির্ভরতা (dependency) তৈরি করার বদলে স্বয়ংক্রিয়ভাবে তা ক্লাসে ইনজেক্ট করে দেয়। উদাহরণস্বরূপ, যদি কোনো ক্লাস অন্য একটি ক্লাসের উপর নির্ভরশীল হয়, তাহলে DI ওই নির্ভরশীল ক্লাসটি সেই ক্লাসে ইনজেক্ট করে দেয়, যার ফলে কোডটি আরও পরিষ্কার ও পরিচালনাযোগ্য হয়। DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন কম্পোনেন্টগুলোর মধ্যে কম সম্পর্ক (loose coupling) স্থাপন করা হয়।
.NET Core এ তিন ধরনের Dependency Injection রয়েছে:
.NET Core এ DI ব্যবহারের জন্য আপনাকে Startup.cs
ফাইলের ConfigureServices
মেথডে সার্ভিস রেজিস্টার করতে হয়। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:
ধরা যাক, আমাদের একটি IEmailService
ইন্টারফেস এবং তার একটি ইমপ্লিমেন্টেশন EmailService
আছে, এবং আমরা এই সার্ভিসটিকে ক্লাসে ইনজেক্ট করতে চাই।
public interface IEmailService
{
void SendEmail(string to, string subject, string body);
}
public class EmailService : IEmailService
{
public void SendEmail(string to, string subject, string body)
{
// ইমেইল পাঠানোর কোড
Console.WriteLine($"Email sent to {to} with subject {subject}");
}
}
Startup.cs
ফাইলে Dependency Injection রেজিস্টার করুন:public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Dependency Injection রেজিস্টার করা হচ্ছে
services.AddScoped<IEmailService, EmailService>(); // Scoped ইনজেকশন
}
}
IEmailService
ইনজেক্ট করতে হবে:public class MyController : Controller
{
private readonly IEmailService _emailService;
// Dependency Injection এর মাধ্যমে IEmailService ইনজেক্ট করা হচ্ছে
public MyController(IEmailService emailService)
{
_emailService = emailService;
}
public IActionResult SendTestEmail()
{
_emailService.SendEmail("test@example.com", "Test Subject", "Test Body");
return Ok("Email sent");
}
}
এখানে, MyController
কনস্ট্রাক্টরে IEmailService
ইনজেক্ট করা হয়েছে। এটি Dependency Injection এর মাধ্যমে করা হয়েছে, যা স্বয়ংক্রিয়ভাবে EmailService
ক্লাসের একটি ইনস্ট্যান্স তৈরি করবে এবং কন্ট্রোলারে ইনজেক্ট করবে।
Mock
অবজেক্ট তৈরি করে আসল ডিপেনডেন্সির পরিবর্তে টেস্ট ডিপেনডেন্সি ব্যবহার করতে পারেন।Dependency Injection একটি শক্তিশালী ডিজাইন প্যাটার্ন যা .NET Core এ কোডের নমনীয়তা, টেস্টেবিলিটি এবং রিইউজেবিলিটি বাড়ায়। এটি অ্যাপ্লিকেশনে কমপ্লেক্স নির্ভরশীলতা ম্যানেজমেন্টে সাহায্য করে, এবং অ্যাপ্লিকেশনগুলির মধ্যে লুজ কাপলিং নিশ্চিত করে। .NET Core এর বিল্ট-ইন DI কনটেইনারের মাধ্যমে ডেভেলপাররা সহজে তাদের ডিপেনডেন্সি ইনজেক্ট করতে পারেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও কার্যকর ও টেস্ট-ফ্রেন্ডলি করে তোলে।
common.read_more