ASP.NET Core MVC অ্যাপ্লিকেশন তৈরি করার সময়, কন্ট্রোলার এবং একশন (Action) অত্যন্ত গুরুত্বপূর্ণ উপাদান। কন্ট্রোলার হল একটি ক্লাস যা ইউজারের রিকোয়েস্টের জন্য উপযুক্ত একশন মেথডগুলো পরিচালনা করে। প্রতিটি একশন মেথড নির্দিষ্ট কাজ সম্পাদন করে এবং রিকোয়েস্টের ফলাফল রিটার্ন করে।
কন্ট্রোলার একটি ক্লাস যা ControllerBase অথবা Controller ক্লাস থেকে উত্তরাধিকারসূত্রে পাওয়া যায়। কন্ট্রোলারের কাজ হল, ইউজারের HTTP রিকোয়েস্ট গ্রহণ করা, সেগুলোর প্রক্রিয়া করা এবং উপযুক্ত ভিউ অথবা ডেটা রিটার্ন করা।
কন্ট্রোলারের ভূমিকা
একটি কন্ট্রোলারের সাধারণ গঠন হতে পারে এইরকম:
using Microsoft.AspNetCore.Mvc;
namespace MyApp.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View(); // View রিটার্ন করা
}
}
}
এখানে HomeController
হল কন্ট্রোলার এবং Index
হল একশন মেথড।
একশন মেথড একটি পাবলিক মেথড যা কন্ট্রোলারের মধ্যে থাকে। এটি HTTP রিকোয়েস্ট গ্রহণ করে এবং রিকোয়েস্টের ভিত্তিতে একটি রেসপন্স তৈরি করে। একশন মেথডগুলো সাধারণত IActionResult টাইপ রিটার্ন করে, যা বিভিন্ন ধরনের রেসপন্স (যেমন ভিউ, ডেটা, রিডিরেক্ট, বা স্ট্যাটাস কোড) ফেরত দিতে পারে।
একশন মেথডের ধরন:
View()
, Redirect()
, Json()
ইত্যাদি।একটি সাধারণ একশন মেথড উদাহরণ:
public IActionResult About()
{
return View(); // 'About' ভিউ রিটার্ন করা
}
এখানে About
হল একটি একশন মেথড যা ইউজারের রিকোয়েস্টের পর View()
রিটার্ন করে।
যখন আপনি ওয়েব API তৈরি করেন, তখন একশন মেথডের মাধ্যমে আপনি সাধারণত JSON রেসপন্স পাঠাবেন। একশন মেথডে JsonResult
বা Ok()
ব্যবহার করে JSON ডেটা ফেরত দেওয়া হয়।
উদাহরণ:
[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
[HttpGet]
public IActionResult GetAllProducts()
{
var products = new List<string> { "Product1", "Product2", "Product3" };
return Ok(products); // JSON রেসপন্স রিটার্ন করা
}
}
এখানে ProductController
একটি API কন্ট্রোলার, এবং GetAllProducts()
একশন মেথড JSON আকারে ডেটা রিটার্ন করছে।
ASP.NET Core MVC এ একশন মেথডের বেশ কিছু রিটার্ন টাইপ রয়েছে, যেমন:
ViewResult: ভিউ রিটার্ন করার জন্য ব্যবহৃত হয়। এটি ভিউ (HTML পেজ) রিটার্ন করে।
return View();
JsonResult: JSON রিটার্ন করার জন্য ব্যবহৃত হয়। এটি API কন্ট্রোলার বা AJAX রিকোয়েস্টের জন্য উপযুক্ত।
return Json(new { name = "John", age = 30 });
RedirectResult: ইউজারকে অন্য কোনো URL এ রিডিরেক্ট করার জন্য ব্যবহৃত হয়।
return RedirectToAction("Index");
PartialViewResult: একটি পার্শিয়াল ভিউ রিটার্ন করার জন্য ব্যবহৃত হয়।
return PartialView("_MyPartialView");
ContentResult: সরাসরি কন্টেন্ট (যেমন টেক্সট বা HTML) রিটার্ন করার জন্য ব্যবহৃত হয়।
return Content("Hello, World!");
একশন মেথড রাউটিং কন্ট্রোলারের সাথে যুক্ত থাকে। ASP.NET Core এ রাউটিং স্বয়ংক্রিয়ভাবে কন্ট্রোলার এবং একশন মেথডের নাম অনুযায়ী কাজ করে। উদাহরণস্বরূপ, যদি HomeController
এর মধ্যে Index()
একশন মেথড থাকে, তবে http://localhost:5000/Home/Index
URLটি সেই মেথডে চলে যাবে।
কিন্তু আপনি কাস্টম রাউটিংও ব্যবহার করতে পারেন:
[Route("home/welcome/{name}")]
public IActionResult Welcome(string name)
{
return Content($"Welcome {name}");
}
এখানে home/welcome/{name}
URL রাউটটি কন্ট্রোলারের Welcome
একশন মেথডে নির্দেশিত করবে।
ASP.NET Core MVC অ্যাপ্লিকেশনে কন্ট্রোলার এবং একশন মেথড অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। কন্ট্রোলার ইউজারের রিকোয়েস্ট রিসিভ করে এবং একশন মেথডের মাধ্যমে রেসপন্স রিটার্ন করে। একশন মেথড বিভিন্ন ধরনের রেসপন্স (ভিউ, JSON, রিডিরেক্ট ইত্যাদি) রিটার্ন করতে পারে এবং রাউটিংয়ের মাধ্যমে নির্দিষ্ট URL গুলোকে কন্ট্রোলার এবং একশন মেথডের সাথে সংযুক্ত করে। এই উপাদানগুলো আপনাকে ASP.NET Core অ্যাপ্লিকেশন ডিজাইন করতে সহায়তা করবে।
ASP.NET Core অ্যাপ্লিকেশনে Controllers হলো এমন একটি মৌলিক অংশ যা Model-View-Controller (MVC) আর্কিটেকচারে ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনের ব্যবসায়িক লজিক (Business Logic) পরিচালনা করে এবং ভিউ (View) এবং মডেল (Model) এর মধ্যে যোগাযোগ স্থাপন করে। Controller কেবলমাত্র ক্লায়েন্টের অনুরোধ গ্রহণ (Request) করে এবং সেই অনুযায়ী সঠিক রেসপন্স (Response) তৈরি করে।
অনুরোধের প্রসেসিং (Request Processing)
Controller মূলত ওয়েব অ্যাপ্লিকেশনের রিকোয়েস্ট গ্রহণ করে এবং তা প্রক্রিয়া করে। ইউজার যখন কোনো রিকোয়েস্ট পাঠায়, Controller সেই রিকোয়েস্টে আনা তথ্য ধরে নিয়ে অ্যাপ্লিকেশন লজিক বা ডেটাবেসের সাথে যোগাযোগ করতে পারে, এরপর সঠিক রেসপন্স প্রদান করে।
অ্যাকশন মেথড (Action Methods)
Controller সাধারণত এক বা একাধিক Action Methods ধারণ করে, যেগুলি রিকোয়েস্টের ভিত্তিতে নির্দিষ্ট কাজ সম্পাদন করে। প্রতিটি অ্যাকশন মেথড সাধারণত একটি নির্দিষ্ট HTTP রিকোয়েস্টের জন্য যেমন GET, POST, PUT, DELETE ইত্যাদি এর মাধ্যমে কার্যকর হয়।
উদাহরণস্বরূপ, যদি আপনি /home/index
URL-এ যান, তবে Index অ্যাকশন মেথডটি সাধারণত সেই রিকোয়েস্টটি প্রক্রিয়া করবে এবং সংশ্লিষ্ট ভিউ বা ডেটা রিটার্ন করবে।
ডেটা ম্যানিপুলেশন এবং রেসপন্স প্রদান (Data Manipulation and Response)
Controller ডেটাবেসের সাথে যোগাযোগ করতে পারে এবং Model-এর সাহায্যে ডেটা ম্যানিপুলেট করতে পারে। এতে অ্যাকশন মেথড ডেটা নিয়ে ভিউ বা API রেসপন্স পাঠাতে পারে। এতে Model Binding এর মাধ্যমে ফর্ম ডেটা প্রক্রিয়া করা হয় এবং Model Validation এর মাধ্যমে ইনপুট ভ্যালিডেশন পরিচালনা করা হয়।
বিজনেস লজিক (Business Logic)
Controller এ বিজনেস লজিক রাখা হয়ে থাকে যা মডেল এবং ভিউয়ের মধ্যকার লিঙ্ক তৈরি করে। উদাহরণস্বরূপ, একজন ইউজারের লগইন চেক করা, শপিং কার্টের সামগ্রী আপডেট করা বা অর্থনৈতিক হিসাব করা এগুলি Controller-এ করা হয়।
রিডাইরেকশন এবং রাউটিং (Redirection and Routing)
Controller রিকোয়েস্ট প্রক্রিয়া করার পর, রিকোয়েস্টের ধরণ অনুযায়ী রিডাইরেকশন (Redirect) বা রাউটিং (Routing) করতে পারে। যেমন, ইউজার সফলভাবে লগইন করলে তাকে ড্যাশবোর্ডে রিডাইরেক্ট করা হতে পারে অথবা ডেটা সেভ করার পর ভিন্ন একটি পৃষ্ঠায় প্রেরণ করা হতে পারে।
1. Action Filters
Controller অ্যাকশনগুলোর উপর বিভিন্ন ফিল্টার প্রয়োগ করা যায়। এসব ফিল্টারগুলি রিকোয়েস্ট বা রেসপন্স প্রসেসের আগে, পরে বা এমনকি একটিভ করার আগেও প্রক্রিয়া চালাতে পারে। যেমন, Authorization Filter ব্যবহার করে শুধুমাত্র অনুমোদিত ইউজারদেরকে অ্যাকশন এক্সেস করার অনুমতি দেয়া হয়।
2. Dependency Injection (DI)
ASP.NET Core Controller-এ Dependency Injection ব্যবহার করে একাধিক সার্ভিস ইনজেক্ট করা যায়। যেমন, ডাটাবেস সার্ভিস বা রেপোজিটরি ক্লাস, যা অ্যাকশন মেথডগুলিতে ডেটা পরিচালনা করতে সহায়তা করে।
3. ViewResult এবং JSONResult
Controller অ্যাকশন মেথডের মাধ্যমে ViewResult বা JSONResult রিটার্ন করতে পারে। ViewResult সাধারণত HTML রেসপন্স তৈরি করে, যা ভিউতে প্রদর্শিত হয়, আর JSONResult JSON ডাটা রিটার্ন করে, যা API রেসপন্স হিসেবে ব্যবহার হয়।
public class HomeController : Controller
{
// GET: /Home/Index
public IActionResult Index()
{
var message = "Welcome to ASP.NET Core!";
return View("Index", message);
}
// POST: /Home/Submit
[HttpPost]
public IActionResult Submit(string data)
{
// ডেটা প্রক্রিয়া এবং প্রাসঙ্গিক লজিক
return RedirectToAction("Index");
}
}
উপরের কোডে, HomeController দুটি অ্যাকশন মেথড ধারণ করে:
Controller হল ASP.NET Core অ্যাপ্লিকেশনের মূল অংশ যা রিকোয়েস্ট প্রক্রিয়া, বিজনেস লজিক এবং ডেটাবেস ম্যানিপুলেশন পরিচালনা করে। এর মাধ্যমে মডেল, ভিউ এবং একশন মেথডের মধ্যে সঠিক সমন্বয় প্রতিষ্ঠিত হয়, যা ব্যবহারকারীর রিকোয়েস্ট অনুযায়ী সঠিক রেসপন্স প্রদান করে। এটি অ্যাপ্লিকেশনের কার্যকারিতা এবং কার্যকরী অভিজ্ঞতা উন্নত করতে সহায়ক।
Action Methods হল ASP.NET Core MVC কন্ট্রোলারের মেথড, যেগুলি ব্যবহারকারীর রিকোয়েস্ট গ্রহণ করে এবং সঠিক রেসপন্স প্রদান করে। এই মেথডগুলির মাধ্যমে ব্যবহারকারীর ইনপুট প্রক্রিয়া করা হয় এবং সেগুলোর জন্য ভিউ বা অন্য কোনো রেসপন্স তৈরি করা হয়।
Action Method হল একটি পাবলিক মেথড যা ASP.NET Core MVC কন্ট্রোলারের অংশ এবং এটি HTTP রিকোয়েস্ট প্রক্রিয়া করতে ব্যবহৃত হয়। প্রতিটি Action Method এক বা একাধিক HTTP রিকোয়েস্টকে হ্যান্ডেল করে, যেমন GET, POST, PUT, DELETE ইত্যাদি। সাধারণত, কন্ট্রোলার ক্লাসে একাধিক Action Method থাকতে পারে, যা বিভিন্ন রিকোয়েস্ট টাইপ এবং রাউট পাথ অনুযায়ী কাজ করে।
Action Methods বিভিন্ন ধরনের রিটার্ন টাইপ রিটার্ন করতে পারে। নিচে সাধারণ কিছু রিটার্ন টাইপের উদাহরণ দেওয়া হলো:
ViewResult একটি Action Method থেকে সাধারণত ব্যবহার করা হয় যখন আপনি HTML পেজ (ভিউ) ব্যবহারকারীকে প্রদর্শন করতে চান। View()
মেথডের মাধ্যমে একটি ভিউ রিটার্ন করা হয়।
উদাহরণ:
public ViewResult Index()
{
return View();
}
এখানে, View()
মেথড ভিউ ফাইল রিটার্ন করে, যা Views
ফোল্ডারের মধ্যে থাকে।
ActionResult একটি সাধারণ রিটার্ন টাইপ যা বিভিন্ন ধরনের রিটার্ন টাইপের জন্য বেস ক্লাস হিসেবে কাজ করে। এটি ViewResult
, JsonResult
, RedirectResult
ইত্যাদি সহ বিভিন্ন রিটার্ন টাইপকে ধারণ করতে পারে। এটা বেশ উপযোগী যখন আপনি একই Action Method থেকে বিভিন্ন ধরনের রেসপন্স রিটার্ন করতে চান।
উদাহরণ:
public ActionResult Index()
{
return View(); // ViewResult হিসেবে ভিউ রিটার্ন করবে।
}
JsonResult ব্যবহৃত হয় যখন অ্যাপ্লিকেশন JSON ডেটা রিটার্ন করতে চায়, যেমন ওয়েব API থেকে। এটি সাধারণত অ্যাজাক্স রিকোয়েস্ট বা API রেসপন্সের ক্ষেত্রে ব্যবহৃত হয়।
উদাহরণ:
public JsonResult GetDetails()
{
var data = new { Name = "John", Age = 30 };
return Json(data); // JSON আউটপুট রিটার্ন করবে।
}
RedirectToActionResult ব্যবহার করা হয় এক অ্যাকশন থেকে অন্য অ্যাকশনে রিডিরেক্ট করার জন্য। এটি সাধারণত ব্যবহার হয় যখন একটি নির্দিষ্ট কাজ সম্পন্ন হওয়ার পর অন্য কোনো পেজে রিডিরেক্ট করতে হয়।
উদাহরণ:
public RedirectToActionResult RedirectToHome()
{
return RedirectToAction("Index", "Home");
}
RedirectResult সাধারণত অন্য URL এ রিডিরেক্ট করার জন্য ব্যবহৃত হয়, যেমন একটি সাইটের বাহিরে বা অন্য পেজে। এটি Redirect()
মেথডের মাধ্যমে ব্যবহৃত হয়।
উদাহরণ:
public RedirectResult RedirectToGoogle()
{
return Redirect("https://www.google.com");
}
ContentResult সাধারণত কাঁচা টেক্সট বা HTML কনটেন্ট রিটার্ন করার জন্য ব্যবহৃত হয়। এটি সরাসরি কন্টেন্ট প্রদর্শন করতে সাহায্য করে।
উদাহরণ:
public ContentResult ShowMessage()
{
return Content("Hello, World!"); // টেক্সট রিটার্ন করবে।
}
FileResult ব্যবহৃত হয় ফাইল রিটার্ন করার জন্য। এটি বিশেষভাবে ফাইল ডাউনলোড বা ফাইল প্রদর্শন করতে কাজে আসে।
উদাহরণ:
public FileResult DownloadFile()
{
byte[] fileBytes = System.IO.File.ReadAllBytes("path/to/file");
return File(fileBytes, "application/pdf", "downloadedfile.pdf");
}
ASP.NET Core এ Action Methods বিভিন্ন HTTP মেথডের জন্য ডিজাইন করা যেতে পারে:
এছাড়া, কন্ট্রোলার অ্যাকশন মেথডের সাথে HttpGet
, HttpPost
, HttpPut
, HttpDelete
অ্যাট্রিবিউট ব্যবহার করা যেতে পারে, যা নির্দিষ্ট HTTP মেথডে রিকোয়েস্ট গ্রহণ করতে সাহায্য করে।
ASP.NET Core MVC কন্ট্রোলারে Action Methods ব্যবহারকারীর রিকোয়েস্টের ভিত্তিতে সঠিক রেসপন্স প্রদান করে। Action Methods বিভিন্ন ধরনের রিটার্ন টাইপ ব্যবহার করে, যেমন ViewResult, JsonResult, RedirectResult, ইত্যাদি। এগুলি বিভিন্ন প্রয়োজনে ব্যবহার করা হয় যেমন HTML পেজ রিটার্ন, JSON ডেটা প্রদান, রিডিরেক্ট করা, অথবা কাঁচা টেক্সট বা ফাইল রিটার্ন করা। Action Methods ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি আরও ডাইনামিক এবং কার্যকরী হয়ে ওঠে।
API (Application Programming Interface) ডেভেলপমেন্টে JSON (JavaScript Object Notation) একটি জনপ্রিয় ডাটা ফরম্যাট হিসেবে ব্যবহৃত হয়। JSON হল একটি হালকা ওয়েট ডাটা ফরম্যাট যা সহজে পাঠযোগ্য এবং প্রক্রিয়া করা যায়, এবং এটি ওয়েব অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন এবং অন্যান্য সিস্টেমের মধ্যে ডাটা আদান-প্রদান করতে ব্যবহৃত হয়। ASP.Net Core তে API কন্ট্রোলার তৈরি করা এবং JSON রেসপন্স তৈরি করার প্রক্রিয়া খুবই সোজা এবং সুবিধাজনক।
ASP.Net Core তে API কন্ট্রোলার হলো এমন একটি কন্ট্রোলার ক্লাস যা HTTP রিকোয়েস্টগুলো প্রসেস করে এবং সেগুলোর জন্য HTTP রেসপন্স প্রদান করে। API কন্ট্রোলার সাধারণত Web API এপ্লিকেশন তৈরি করতে ব্যবহৃত হয় এবং এটি JSON বা XML ফরম্যাটে ডাটা রিটার্ন করে।
ASP.Net Core তে API কন্ট্রোলার তৈরি করার জন্য ControllerBase
ক্লাসটি ইনহেরিট করা হয়, যা কন্ট্রোলার এর ফাংশনালিটি সহজভাবে পরিচালনা করতে সহায়তা করে।
ASP.Net Core তে একটি API কন্ট্রোলার তৈরির জন্য নিম্নলিখিত ধাপগুলো অনুসরণ করা হয়:
কন্ট্রোলার ক্লাস তৈরি
কন্ট্রোলার ক্লাস তৈরি করার জন্য ControllerBase
ক্লাস ইনহেরিট করা হয়, এবং [Route]
অ্যাট্রিবিউট দিয়ে রাউটিং কনফিগার করা হয়।
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
// GET: api/products
[HttpGet]
public IActionResult GetProducts()
{
var products = new List<string> { "Product1", "Product2", "Product3" };
return Ok(products); // JSON রেসপন্স
}
}
Route
অ্যাট্রিবিউট ব্যবহার করে URL পাথ নির্ধারণ করা হয়। উদাহরণস্বরূপ, api/products
রাউটের জন্য কন্ট্রোলার তৈরি করা হয়েছে।ASP.Net Core তে API কন্ট্রোলার দ্বারা JSON রেসপন্স রিটার্ন করা খুবই সহজ। রিটার্ন টাইপ হিসেবে IActionResult
বা ActionResult<T>
ব্যবহার করা হয় এবং এর মধ্যে Ok()
মেথড ব্যবহার করে JSON রেসপন্স পাঠানো হয়।
JSON রেসপন্স প্রদান করার উদাহরণ:
[HttpGet]
public IActionResult GetProduct(int id)
{
var product = new { Id = id, Name = "Product1", Price = 100 };
return Ok(product); // এটি JSON রেসপন্স হিসেবে রিটার্ন হবে
}
উপরের উদাহরণে, Ok()
মেথড JSON ডাটা রিটার্ন করবে, যা ক্লায়েন্ট সাইডে JSON ফরম্যাটে প্রদর্শিত হবে। এই JSON ডাটা কিছু এরকম হবে:
{
"Id": 1,
"Name": "Product1",
"Price": 100
}
JSON রেসপন্সের অন্যান্য ভ্যালিড রিটার্ন টাইপস:
BadRequest: যদি রিকোয়েস্টে কোন ভুল থাকে বা ইনপুট ভ্যালিড না হয়, তাহলে BadRequest()
ব্যবহার করা হয়।
[HttpPost]
public IActionResult CreateProduct(Product product)
{
if (product == null)
{
return BadRequest("Product data is required.");
}
return Ok(product);
}
NotFound: যদি কোনো ডাটা না পাওয়া যায়, তাহলে NotFound()
রিটার্ন করা হয়।
[HttpGet("{id}")]
public IActionResult GetProductById(int id)
{
var product = _context.Products.FirstOrDefault(p => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
Created: নতুন রিসোর্স তৈরি করা হলে, Created()
মেথড ব্যবহার করে সফল রেসপন্স পাঠানো হয়।
[HttpPost]
public IActionResult CreateProduct(Product product)
{
_context.Products.Add(product);
_context.SaveChanges();
return CreatedAtAction(nameof(GetProductById), new { id = product.Id }, product);
}
ASP.Net Core API কন্ট্রোলারে একাধিক Action
মেথড থাকতে পারে, এবং প্রতিটি মেথড বিভিন্ন HTTP রিকোয়েস্ট (GET, POST, PUT, DELETE) এর জন্য নির্দিষ্ট কাজ করে। প্রতিটি একশন মেথড IActionResult
বা ActionResult<T>
রিটার্ন করে এবং সেই অনুযায়ী JSON রেসপন্স প্রদান করে।
GET Request: সাধারণত ডাটা প্রাপ্তির জন্য ব্যবহৃত হয়।
[HttpGet]
public IActionResult GetAllProducts()
{
var products = _context.Products.ToList();
return Ok(products);
}
POST Request: নতুন ডাটা পাঠানোর জন্য ব্যবহৃত হয়।
[HttpPost]
public IActionResult CreateProduct(Product product)
{
_context.Products.Add(product);
_context.SaveChanges();
return CreatedAtAction(nameof(GetProductById), new { id = product.Id }, product);
}
PUT Request: বিদ্যমান ডাটা আপডেট করার জন্য ব্যবহৃত হয়।
[HttpPut("{id}")]
public IActionResult UpdateProduct(int id, Product product)
{
if (id != product.Id)
{
return BadRequest();
}
_context.Entry(product).State = EntityState.Modified;
_context.SaveChanges();
return NoContent(); // No Content response
}
DELETE Request: ডাটা মুছে ফেলার জন্য ব্যবহৃত হয়।
[HttpDelete("{id}")]
public IActionResult DeleteProduct(int id)
{
var product = _context.Products.Find(id);
if (product == null)
{
return NotFound();
}
_context.Products.Remove(product);
_context.SaveChanges();
return NoContent();
}
ASP.Net Core API কন্ট্রোলার তৈরি করা এবং JSON রেসপন্স প্রদান করা অত্যন্ত সহজ এবং নমনীয়। ডেভেলপাররা সহজেই বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে ডাটা প্রক্রিয়া করতে এবং JSON ফরম্যাটে ক্লায়েন্টকে রেসপন্স পাঠাতে পারেন। এই রেসপন্স ডাটা আধুনিক ওয়েব অ্যাপ্লিকেশন ও মোবাইল অ্যাপ্লিকেশনগুলোর জন্য অত্যন্ত উপযোগী এবং ফাস্ট ডাটা ট্রান্সফার নিশ্চিত করে।
Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি বা নির্ভরশীলতা হ্যান্ডল করতে ব্যবহৃত হয়। এর মাধ্যমে, অ্যাপ্লিকেশন কম্পোনেন্টগুলোর মধ্যে স্বতন্ত্রতা বা loosely coupled সম্পর্ক স্থাপন করা যায়। DI এর মাধ্যমে আমরা একটি ক্লাসের মধ্যে নির্ভরশীল অবজেক্টগুলো সরাসরি তৈরি না করে, সেগুলো বাইরের কোনও সোর্স (যেমন DI কন্টেইনার) থেকে ইনজেক্ট করতে পারি।
DI এর মূল উদ্দেশ্য হল, কোডের রক্ষণাবেক্ষণ এবং টেস্টিংকে সহজ করা, কারণ এর মাধ্যমে কোডের বিভিন্ন অংশ একে অপরের সাথে কম যোগাযোগ রাখে।
ASP.NET Core DI কে প্রথম থেকেই বিল্ট-ইন সাপোর্ট প্রদান করে, তাই আপনাকে বাইরের কোনো লাইব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করার দরকার নেই। এটি অ্যাপ্লিকেশন স্টার্টআপে কনফিগার করা হয় এবং নির্দিষ্ট সার্ভিসের জন্য ডিপেনডেন্সি ইনজেকশন সেট করা হয়। DI সার্ভিসটি কনফিগার করার জন্য অ্যাপ্লিকেশন এর Startup.cs
ফাইলে সেটআপ করা হয়।
ASP.NET Core অ্যাপ্লিকেশন তৈরি করার সময় DI কনটেইনারটি একটি সার্ভিস রেজিস্ট্রেশন পদ্ধতি প্রদান করে, যেখানে আপনি বিভিন্ন সার্ভিস (যেমন ট্রান্সিয়েন্ট, সিঙ্গলটন, স্কোপড) রেজিস্টার করতে পারেন। এগুলি পরবর্তীতে ইনজেক্ট হয়ে চলতে থাকে।
সার্ভিস রেজিস্ট্রেশনStartup.cs
ফাইলে ConfigureServices
মেথডে সার্ভিস রেজিস্টার করা হয়। এখানে আপনি সার্ভিসগুলিকে বিভিন্ন লাইফটাইম (Transients, Scoped, Singleton) এর মধ্যে রেজিস্টার করতে পারেন।
Service Registration উদাহরণ:
public void ConfigureServices(IServiceCollection services)
{
// Singleton সার্ভিস রেজিস্ট্রেশন
services.AddSingleton<IMyService, MyService>();
// Scoped সার্ভিস রেজিস্ট্রেশন
services.AddScoped<IOrderService, OrderService>();
// Transient সার্ভিস রেজিস্ট্রেশন
services.AddTransient<IProductService, ProductService>();
}
এখানে IMyService
একটি ইন্টারফেস এবং MyService
তার ইমপ্লিমেন্টেশন। AddSingleton
, AddScoped
, AddTransient
মেথডগুলো সার্ভিসের বিভিন্ন লাইফটাইম রেজিস্টার করতে ব্যবহৃত হয়।
একবার সার্ভিস রেজিস্টার করার পর, ASP.NET Core আপনাকে স্বয়ংক্রিয়ভাবে সেগুলো ইনজেক্ট করতে সাহায্য করে। সার্ভিস ইনজেক্ট করার জন্য, কনট্রোলার বা ক্লাসের কনস্ট্রাকটরে সরাসরি সার্ভিসটি ইনজেক্ট করা হয়।
কনট্রোলারে সার্ভিস ইনজেকশন উদাহরণ:
public class HomeController : Controller
{
private readonly IMyService _myService;
// কনস্ট্রাকটরে DI ব্যবহার
public HomeController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
var result = _myService.GetData();
return View(result);
}
}
এখানে HomeController
-এ IMyService
ইন্টারফেস ইনজেক্ট করা হচ্ছে। ASP.NET Core এটি অটোমেটিক্যালি ইনজেক্ট করবে, কারণ এটি সার্ভিস রেজিস্টার করা হয়েছে ConfigureServices
মেথডে।
ConfigureServices
মেথডে সার্ভিস রেজিস্টার করতে হবে। সার্ভিসগুলোকে ট্রান্সিয়েন্ট, স্কোপড, অথবা সিঙ্গলটন হিসেবে কনফিগার করা হয়।ধরা যাক, আমাদের একটি সার্ভিস আছে যা ব্যবহারকারীর তথ্য রিট্রিভ করার জন্য ব্যবহৃত হয়।
public interface IUserService
{
User GetUser(int id);
}
public class UserService : IUserService
{
public User GetUser(int id)
{
// এখানে ডেটাবেস বা অন্য কোনো সোর্স থেকে ডেটা রিটার্ন করা হবে
return new User { Id = id, Name = "John Doe" };
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IUserService, UserService>();
}
public class UserController : Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public IActionResult Index(int id)
{
var user = _userService.GetUser(id);
return View(user);
}
}
এখানে, IUserService
ইন্টারফেসটি UserService
ক্লাসের মাধ্যমে বাস্তবায়িত হয়েছে, এবং কনট্রোলারে ইনজেক্ট করা হয়েছে।
সারাংশ
Dependency Injection (DI) ASP.NET Core অ্যাপ্লিকেশনগুলিতে নির্ভরশীলতা ম্যানেজমেন্টের একটি শক্তিশালী টুল। এটি কোডের ক্লিনলিনেস, রক্ষণাবেক্ষণ সহজতা, এবং টেস্টিং সহজ করে তোলে। ASP.NET Core DI সিস্টেম স্বয়ংক্রিয়ভাবে সার্ভিস ইনজেকশন পরিচালনা করে, যা কোডে মডুলারিটি ও স্কেলেবিলিটি আনে।
common.read_more