Dependency Injection ব্যবহার

Microsoft Technologies - ডট নেট কোর (Dot.Net Core) ASP.Net Core অ্যাপ্লিকেশন তৈরি (Creating an ASP.Net Core Application) |
236
236

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন, যা অ্যাপ্লিকেশনগুলিতে ক্লাসের মধ্যে নির্ভরতা (dependencies) ইনজেক্ট করার একটি পদ্ধতি। এর মাধ্যমে কোডে নমনীয়তা, টেস্টেবিলিটি এবং রিইউজেবিলিটি বৃদ্ধি পায়। .NET CoreDependency Injection ব্যবহারের জন্য একটি বিল্ট-ইন সুবিধা রয়েছে, যা ডেভেলপারদের কমপ্লেক্স ডিপেনডেন্সি ম্যানেজমেন্টে সহায়তা করে।


Dependency Injection কী?

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


Dependency Injection এর ধরণ

.NET Core এ তিন ধরনের Dependency Injection রয়েছে:

  1. Transient: এই ধরনের সার্ভিসটি প্রত্যেকটি অনুরোধে নতুনভাবে তৈরি হয়। যদি একটি ক্লাসে Transient সার্ভিস ইনজেক্ট করা হয়, তবে প্রত্যেকবার যখন ওই ক্লাসটি ব্যবহার করা হবে, নতুন একটি ইনস্ট্যান্স তৈরি হবে। সাধারণত, ছোট, অবস্থা-নির্ভর সার্ভিসগুলির জন্য এটি ব্যবহৃত হয়।
  2. Scoped: Scoped সার্ভিসগুলি প্রতি HTTP রিকোয়েস্টে একটি ইনস্ট্যান্স তৈরি করে। এটি সাধারণত ওয়েব অ্যাপ্লিকেশনের জন্য উপযুক্ত যেখানে এক রিকোয়েস্টের মধ্যে একাধিক ক্লাস একই ইনস্ট্যান্স ব্যবহার করে।
  3. Singleton: এই সার্ভিস একবার তৈরি হলে তা পুরো অ্যাপ্লিকেশনজুড়ে একটি ইনস্ট্যান্স হিসেবে রয়ে যায়। এর মানে হলো, সার্ভিসটির একটি মাত্র ইনস্ট্যান্স থাকবে, যা পুরো লাইফটাইমে ব্যবহার হবে।

.NET Core এ Dependency Injection কিভাবে ব্যবহার করবেন?

.NET Core এ DI ব্যবহারের জন্য আপনাকে Startup.cs ফাইলের ConfigureServices মেথডে সার্ভিস রেজিস্টার করতে হয়। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:


উদাহরণ

ধরা যাক, আমাদের একটি IEmailService ইন্টারফেস এবং তার একটি ইমপ্লিমেন্টেশন EmailService আছে, এবং আমরা এই সার্ভিসটিকে ক্লাসে ইনজেক্ট করতে চাই।

  1. প্রথমে, একটি ইন্টারফেস তৈরি করুন:
public interface IEmailService
{
    void SendEmail(string to, string subject, string body);
}
  1. তারপরে, এর একটি ইমপ্লিমেন্টেশন তৈরি করুন:
public class EmailService : IEmailService
{
    public void SendEmail(string to, string subject, string body)
    {
        // ইমেইল পাঠানোর কোড
        Console.WriteLine($"Email sent to {to} with subject {subject}");
    }
}
  1. এখন, Startup.cs ফাইলে Dependency Injection রেজিস্টার করুন:
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Dependency Injection রেজিস্টার করা হচ্ছে
        services.AddScoped<IEmailService, EmailService>(); // Scoped ইনজেকশন
    }
}
  1. পরবর্তীতে, যেকোনো ক্লাসে 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 ক্লাসের একটি ইনস্ট্যান্স তৈরি করবে এবং কন্ট্রোলারে ইনজেক্ট করবে।


Dependency Injection এর সুবিধা

  1. Loose Coupling: DI ব্যবহারের মাধ্যমে ক্লাসের মধ্যে নির্ভরশীলতা কমিয়ে আনা যায়, যার ফলে কোডটি সহজে পরবর্তী সময়ে পরিবর্তন করা যায়। এতে কোডে আরও নমনীয়তা আনা সম্ভব হয়।
  2. টেস্টেবিলিটি বৃদ্ধি: DI-কে একসাথে ব্যবহার করলে সহজেই ইউনিট টেস্টিং করা সম্ভব। কারণ আপনি Mock অবজেক্ট তৈরি করে আসল ডিপেনডেন্সির পরিবর্তে টেস্ট ডিপেনডেন্সি ব্যবহার করতে পারেন।
  3. কোড রিইউজেবিলিটি: বিভিন্ন ক্লাসে একই ডিপেনডেন্সি ইনজেক্ট করতে পারলে কোডের পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি পায়। একাধিক ক্লাসের মধ্যে সাধারণ সার্ভিসগুলো পুনরায় ব্যবহার করা সম্ভব হয়।
  4. সহজ কনফিগারেশন: একবার DI কনফিগার করার পর, পরবর্তী সময়ে সার্ভিসগুলো ব্যবহারের ক্ষেত্রে কোনো পরিবর্তন করতে হয় না, সেগুলো স্বয়ংক্রিয়ভাবে ইনজেক্ট হয়ে যাবে।
  5. এনভায়রনমেন্ট কনফিগারেশন: আপনি সার্ভিসগুলো বিভিন্ন কনফিগারেশনে রেজিস্টার করতে পারেন (যেমন: Development, Production), যার ফলে পরিবেশ অনুযায়ী কোডের আচরণ নিয়ন্ত্রণ করা সম্ভব হয়।

সারাংশ

Dependency Injection একটি শক্তিশালী ডিজাইন প্যাটার্ন যা .NET Core এ কোডের নমনীয়তা, টেস্টেবিলিটি এবং রিইউজেবিলিটি বাড়ায়। এটি অ্যাপ্লিকেশনে কমপ্লেক্স নির্ভরশীলতা ম্যানেজমেন্টে সাহায্য করে, এবং অ্যাপ্লিকেশনগুলির মধ্যে লুজ কাপলিং নিশ্চিত করে। .NET Core এর বিল্ট-ইন DI কনটেইনারের মাধ্যমে ডেভেলপাররা সহজে তাদের ডিপেনডেন্সি ইনজেক্ট করতে পারেন, যা অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও কার্যকর ও টেস্ট-ফ্রেন্ডলি করে তোলে।


common.content_added_by
টপ রেটেড অ্যাপ

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

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

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