ডিপেনডেন্সি ইনজেকশন

ডিপেনডেন্সি ইনজেকশন (Dependency Injection) হলো একটি ডিজাইন প্যাটার্ন, যা ক্লাসের মধ্যে নির্দিষ্ট ডিপেনডেন্সি বা নির্ভরশীলতা সরাসরি তৈরি না করে বাইরের উৎস থেকে সরবরাহ করা হয়। এর ফলে কোডের মডুলারিটি ও টেস্টেবিলিটি বৃদ্ধি পায় এবং লুজ কাপলিং নিশ্চিত হয়। ডিপেনডেন্সি ইনজেকশন সি# সহ বিভিন্ন আধুনিক প্রোগ্রামিং ভাষায় জনপ্রিয় একটি প্যাটার্ন।


কেন ডিপেনডেন্সি ইনজেকশন ব্যবহার করবেন?

  • লুজ কাপলিং (Loose Coupling): ডিপেনডেন্সি ইনজেকশন ব্যবহার করলে একাধিক ক্লাসের মধ্যে নির্ভরশীলতা কম থাকে।
  • কোডের পুনঃব্যবহারযোগ্যতা: একই কোড সহজেই পুনঃব্যবহার করা যায় এবং নির্ভরশীল ক্লাসগুলোর পরিবর্তন সহজ হয়।
  • টেস্টেবিলিটি: ডিপেনডেন্সি ইনজেকশন ব্যবহার করলে মক অবজেক্ট দিয়ে ইউনিট টেস্ট করা সহজ হয়।
  • মডুলার ডিজাইন: ইনজেকশন প্যাটার্ন ব্যবহারের মাধ্যমে সফটওয়্যার ডিজাইন মডুলার করা যায়।

ডিপেনডেন্সি ইনজেকশন এর প্রধান ধরনসমূহ

ডিপেনডেন্সি ইনজেকশন তিন ধরনের হতে পারে:

  1. কনস্ট্রাক্টর ইনজেকশন: কনস্ট্রাক্টরের মাধ্যমে ডিপেনডেন্সি পাস করা হয়।
  2. প্রোপার্টি ইনজেকশন: প্রোপার্টির মাধ্যমে ডিপেনডেন্সি পাস করা হয়।
  3. মেথড ইনজেকশন: মেথডের প্যারামিটার হিসেবে ডিপেনডেন্সি পাস করা হয়।

১. কনস্ট্রাক্টর ইনজেকশন

কনস্ট্রাক্টর ইনজেকশনে ডিপেনডেন্সি কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়। এটি সবচেয়ে সাধারণ এবং প্রচলিত পদ্ধতি।

উদাহরণ: কনস্ট্রাক্টর ইনজেকশন

csharp

Copy code

public interface ILogger
{
    void Log(string message);
}

public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine("Log: " + message);
    }
}

public class OrderService
{
    private readonly ILogger _logger;

    public OrderService(ILogger logger)
    {
        _logger = logger;
    }

    public void ProcessOrder()
    {
        _logger.Log("Order processed successfully.");
    }
}

ব্যবহার

ILogger logger = new ConsoleLogger();
OrderService orderService = new OrderService(logger);
orderService.ProcessOrder();

এখানে OrderService ক্লাসটি ILogger ইন্টারফেসের উপর নির্ভরশীল, কিন্তু এটি সরাসরি ConsoleLogger তৈরি করে না, বরং বাইরের উৎস থেকে এটি ইনজেক্ট করা হয়। এতে লুজ কাপলিং এবং টেস্টেবিলিটি বৃদ্ধি পায়।


২. প্রোপার্টি ইনজেকশন

প্রোপার্টি ইনজেকশন ব্যবহারে ডিপেনডেন্সি ক্লাসের প্রোপার্টি হিসেবে সেট করা হয়।

উদাহরণ: প্রোপার্টি ইনজেকশন

public class OrderService
{
    public ILogger Logger { get; set; }

    public void ProcessOrder()
    {
        Logger?.Log("Order processed successfully.");
    }
}

ব্যবহার

OrderService orderService = new OrderService();
orderService.Logger = new ConsoleLogger();
orderService.ProcessOrder();

এখানে ILogger প্রোপার্টি হিসেবে ইনজেক্ট করা হয়েছে। এটি ঐচ্ছিক ডিপেনডেন্সির জন্য উপযুক্ত।


৩. মেথড ইনজেকশন

মেথড ইনজেকশনে নির্দিষ্ট মেথডের প্যারামিটার হিসেবে ডিপেনডেন্সি ইনজেক্ট করা হয়।

উদাহরণ: মেথড ইনজেকশন

public class OrderService
{
    public void ProcessOrder(ILogger logger)
    {
        logger.Log("Order processed successfully.");
    }
}

ব্যবহার

OrderService orderService = new OrderService();
orderService.ProcessOrder(new ConsoleLogger());

এখানে ProcessOrder মেথডে ILogger প্যারামিটার হিসেবে ইনজেক্ট করা হয়েছে। এই পদ্ধতি সাধারণত অস্থায়ী বা নির্দিষ্ট মেথডের জন্য প্রয়োজনীয় ডিপেনডেন্সি ব্যবহারে কার্যকর।


ASP.NET Core এ ডিপেনডেন্সি ইনজেকশন

ASP.NET Core-এ ডিপেনডেন্সি ইনজেকশন বিল্ট-ইন সমর্থন করে। সার্ভিসগুলো Startup ক্লাসের ConfigureServices মেথডে রেজিস্টার করা হয়।

উদাহরণ: ASP.NET Core এ ডিপেনডেন্সি ইনজেকশন

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<ILogger, ConsoleLogger>();
    services.AddScoped<OrderService>();
}
  • AddScoped: প্রতি রিকোয়েস্টে একটি নতুন ইনস্ট্যান্স প্রদান করে।
  • AddSingleton: অ্যাপ্লিকেশন চলাকালীন একটি মাত্র ইনস্ট্যান্স প্রদান করে।
  • AddTransient: প্রতিবার সার্ভিস কল করার সময় নতুন ইনস্ট্যান্স প্রদান করে।

কনস্ট্রাক্টর ইনজেকশন ASP.NET Core এ

public class OrderController : Controller
{
    private readonly OrderService _orderService;

    public OrderController(OrderService orderService)
    {
        _orderService = orderService;
    }

    public IActionResult Index()
    {
        _orderService.ProcessOrder();
        return View();
    }
}

এখানে OrderService ডিপেনডেন্সি OrderController এ ইনজেক্ট করা হয়েছে, যা Startup ক্লাসে রেজিস্টার করা আছে।


ডিপেনডেন্সি ইনজেকশনের সুবিধা

  1. লুজ কাপলিং: ডিপেনডেন্সি ইনজেকশন ব্যবহার করলে ক্লাসগুলো স্বাধীনভাবে কাজ করতে পারে।
  2. ইউনিট টেস্টিং সহজ: মক অবজেক্ট বা স্টাব ব্যবহার করে সহজেই টেস্ট করা যায়।
  3. কোডের রিইউজ: কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায় এবং নির্দিষ্ট পরিবর্তনের প্রভাব সীমাবদ্ধ রাখা যায়।
  4. সহজ মেইনটেন্যান্স: ইনজেকশন ব্যবহারে কোডে পরিবর্তন ও রক্ষণাবেক্ষণ করা সহজ হয়।

সংক্ষেপে

পদ্ধতিব্যবহার
কনস্ট্রাক্টর ইনজেকশনকনস্ট্রাক্টরের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা
প্রোপার্টি ইনজেকশনপ্রোপার্টির মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা
মেথড ইনজেকশনমেথডের প্যারামিটার হিসেবে ডিপেনডেন্সি ইনজেক্ট করা
AddScopedASP.NET Core এ প্রতিটি রিকোয়েস্টে নতুন ইনস্ট্যান্স প্রদান করা
AddSingletonঅ্যাপ্লিকেশন চলাকালীন একটি মাত্র ইনস্ট্যান্স প্রদান করা
AddTransientপ্রতিবার সার্ভিস কলের সময় নতুন ইনস্ট্যান্স প্রদান করা

ডিপেনডেন্সি ইনজেকশন কোডকে আরও মডুলার এবং টেস্টেবল করে এবং ASP.NET Core এর মতো ফ্রেমওয়ার্কে বিল্ট-ইন সমর্থনের মাধ্যমে এটি অত্যন্ত কার্যকর।

Content added By

আরও দেখুন...

Promotion