ASP.NET Core-এ Dependency Injection ইমপ্লিমেন্ট করা

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core) Dependency Injection (DI) |
263
263

ASP.NET Core-এ Dependency Injection (DI) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা কোডের পুনঃব্যবহারযোগ্যতা, পরীক্ষাযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করে। DI হল একটি ডিজাইন প্যাটার্ন যেখানে ক্লাসগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি বাইরের উৎস থেকে ইনজেক্ট করা হয়, যা একে খুবই নমনীয় এবং কার্যকরী করে তোলে।

ASP.NET Core-এ Dependency Injection প্রাথমিকভাবে বিল্ট-ইন সমর্থন সহ আসে, এবং এটি খুব সহজেই কনফিগার করা যায়।


Dependency Injection এর ধারণা

Dependency Injection হচ্ছে একটি প্যাটার্ন যার মাধ্যমে ক্লাসের মধ্যে নির্ভরতাগুলি সরাসরি তৈরি না করে বাহ্যিকভাবে (অথবা ইনজেকশনের মাধ্যমে) ইনজেক্ট করা হয়। এর মাধ্যমে কোডের মডুলারিটি বাড়ানো হয় এবং কোডের বিভিন্ন অংশের মধ্যে কম্প্লেক্সিটির স্তর কমানো হয়।

DI এর প্রধান উপকারিতা:

  • টেস্টযোগ্যতা: নির্ভরতাগুলি ইনজেক্ট করার মাধ্যমে ক্লাসগুলোকে সহজে মক করা যায়, ফলে ইউনিট টেস্টিং সহজ হয়।
  • লুজ কপ্লিং: কোডের মধ্যে দৃঢ় সম্পর্ক (tight coupling) কমিয়ে, কোডের মডুলারিটি বৃদ্ধি পায়।
  • কোডের পুনঃব্যবহারযোগ্যতা: নির্ভরশীল কোড বা কম্পোনেন্টগুলিকে পৃথকভাবে ব্যবহার করা যায়।

ASP.NET Core-এ Dependency Injection কনফিগারেশন

ASP.NET Core-এ DI কনফিগার করা অত্যন্ত সহজ এবং এটি Startup.cs বা Program.cs ফাইলে ইনজেকশন কনফিগার করা হয়।

1. Service Interface এবং Implementation তৈরি করা

প্রথমে একটি ইন্টারফেস এবং সেই ইন্টারফেসের জন্য একটি ইমপ্লিমেন্টেশন তৈরি করতে হবে। উদাহরণস্বরূপ:

// Service Interface
public interface IMessageService
{
    string GetMessage();
}

// Service Implementation
public class MessageService : IMessageService
{
    public string GetMessage()
    {
        return "Hello from Dependency Injection!";
    }
}

2. Service Registration

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 লাইফটাইম হিসেবে রেজিস্টার করছে। এটি মানে একবার সেবা তৈরি হলে তা পুরো অ্যাপ্লিকেশনজুড়ে একটাই ইনস্ট্যান্স ব্যবহৃত হবে।

আপনি আরও কয়েকটি লাইফটাইম অপশন ব্যবহার করতে পারেন:

  • AddScoped: এই সেবাটি HTTP রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করবে।
  • AddTransient: প্রতি ডিপেনডেন্সি রেজিস্ট্রেশনের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করবে।

3. সেবা ইনজেক্ট করা

এখন, যেখানে আপনি সেবা প্রয়োজন, সেখানে সেই সেবাটি ইনজেক্ট করতে হবে। উদাহরণস্বরূপ, একটি কন্ট্রোলার ক্লাসে এই সেবাটি ইনজেক্ট করা:

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 কনটেইনারে রেজিস্টার করা হয়েছে।

4. DI সেবা ব্যবহার করা

আপনার অ্যাপ্লিকেশনে HomeController যেমন যেকোনো ক্লাসে DI সেবা ব্যবহার করতে পারেন। ASP.NET Core তার নিজস্ব DI কনটেইনার ব্যবহার করে এই সেবাগুলো ইনজেক্ট করে দেয়।


Scoped, Transient এবং Singleton লাইফটাইম

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.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion