ASP.NET Core-এ Dependency Injection (DI) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা কোডের পুনঃব্যবহারযোগ্যতা, পরীক্ষাযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করে। DI হল একটি ডিজাইন প্যাটার্ন যেখানে ক্লাসগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি বাইরের উৎস থেকে ইনজেক্ট করা হয়, যা একে খুবই নমনীয় এবং কার্যকরী করে তোলে।
ASP.NET Core-এ Dependency Injection প্রাথমিকভাবে বিল্ট-ইন সমর্থন সহ আসে, এবং এটি খুব সহজেই কনফিগার করা যায়।
Dependency Injection হচ্ছে একটি প্যাটার্ন যার মাধ্যমে ক্লাসের মধ্যে নির্ভরতাগুলি সরাসরি তৈরি না করে বাহ্যিকভাবে (অথবা ইনজেকশনের মাধ্যমে) ইনজেক্ট করা হয়। এর মাধ্যমে কোডের মডুলারিটি বাড়ানো হয় এবং কোডের বিভিন্ন অংশের মধ্যে কম্প্লেক্সিটির স্তর কমানো হয়।
ASP.NET Core-এ DI কনফিগার করা অত্যন্ত সহজ এবং এটি Startup.cs বা Program.cs ফাইলে ইনজেকশন কনফিগার করা হয়।
প্রথমে একটি ইন্টারফেস এবং সেই ইন্টারফেসের জন্য একটি ইমপ্লিমেন্টেশন তৈরি করতে হবে। উদাহরণস্বরূপ:
// Service Interface
public interface IMessageService
{
string GetMessage();
}
// Service Implementation
public class MessageService : IMessageService
{
public string GetMessage()
{
return "Hello from Dependency Injection!";
}
}
DI কনফিগার করতে, আপনাকে ConfigureServices মেথডে সেবাটি রেজিস্টার করতে হবে। এটি সাধারণত Startup.cs বা Program.cs ফাইলে করা হয়।
Program.cs ফাইলে DI কনফিগারেশন:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<IMessageService, MessageService>();
// অন্যান্য সেবাগুলিও এখানে রেজিস্টার করুন
});
}
এখানে, AddSingleton<IMessageService, MessageService>() সেবাটিকে Singleton লাইফটাইম হিসেবে রেজিস্টার করছে। এটি মানে একবার সেবা তৈরি হলে তা পুরো অ্যাপ্লিকেশনজুড়ে একটাই ইনস্ট্যান্স ব্যবহৃত হবে।
আপনি আরও কয়েকটি লাইফটাইম অপশন ব্যবহার করতে পারেন:
এখন, যেখানে আপনি সেবা প্রয়োজন, সেখানে সেই সেবাটি ইনজেক্ট করতে হবে। উদাহরণস্বরূপ, একটি কন্ট্রোলার ক্লাসে এই সেবাটি ইনজেক্ট করা:
public class HomeController : Controller
{
private readonly IMessageService _messageService;
// Constructor Dependency Injection
public HomeController(IMessageService messageService)
{
_messageService = messageService;
}
public IActionResult Index()
{
ViewData["Message"] = _messageService.GetMessage();
return View();
}
}
এখানে, IMessageService কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়েছে। ASP.NET Core স্বয়ংক্রিয়ভাবে MessageService ইনস্ট্যান্সটি প্রদান করবে, যেহেতু এটি DI কনটেইনারে রেজিস্টার করা হয়েছে।
আপনার অ্যাপ্লিকেশনে HomeController যেমন যেকোনো ক্লাসে DI সেবা ব্যবহার করতে পারেন। ASP.NET Core তার নিজস্ব DI কনটেইনার ব্যবহার করে এই সেবাগুলো ইনজেক্ট করে দেয়।
DI সেবাগুলো বিভিন্ন লাইফটাইমে রেজিস্টার করা যেতে পারে। প্রতিটি লাইফটাইমের বিশেষ উদ্দেশ্য রয়েছে:
Singleton: এই লাইফটাইমে রেজিস্টার করা সেবা অ্যাপ্লিকেশনের শুরু থেকে শেষ পর্যন্ত একটি ইনস্ট্যান্স হিসেবে কাজ করে। এটি কম্পনেন্টের মধ্যে শেয়ারড ডেটা বা অবস্থান ধারণ করতে পারে।
services.AddSingleton<IMessageService, MessageService>();
Scoped: এই সেবাটি একটি নির্দিষ্ট স্কোপে কাজ করে, সাধারণত HTTP রিকোয়েস্টের সাথে সম্পর্কিত। একটি HTTP রিকোয়েস্টের জন্য একটি ইনস্ট্যান্স তৈরি হবে এবং এটি সেই রিকোয়েস্টের মধ্যে সীমাবদ্ধ থাকবে।
services.AddScoped<IMessageService, MessageService>();
Transient: এই সেবাটি প্রতি ডিপেনডেন্সি রেজিস্ট্রেশন বা ইনজেকশন এ একটি নতুন ইনস্ট্যান্স তৈরি করবে।
services.AddTransient<IMessageService, MessageService>();
ASP.NET Core-এ Dependency Injection (DI) ব্যবহার করে অ্যাপ্লিকেশনের কোডের পুনঃব্যবহারযোগ্যতা, টেস্টযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করা সম্ভব। DI কনফিগারেশন খুবই সহজ এবং এটি স্বয়ংক্রিয়ভাবে সেবাগুলো ইনজেক্ট করে দেয়, যা কোডের কার্যকারিতা এবং নমনীয়তা বাড়ায়। DI-র মাধ্যমে ASP.NET Core আরও শক্তিশালী এবং মডুলার অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।
common.read_more