ASP.Net MVC (Model-View-Controller) আর্কিটেকচারে কন্ট্রোলার এবং অ্যাকশন মেথড গুরুত্বপূর্ণ ভূমিকা পালন করে। কন্ট্রোলার হচ্ছে একটি ক্লাস যা HTTP অনুরোধের জন্য কোড পরিচালনা করে এবং অ্যাকশন মেথড সেই কোড যা HTTP রিকোয়েস্ট অনুযায়ী ব্যবহারকারীর জন্য আউটপুট তৈরি করে।
কন্ট্রোলার হল একটি ক্লাস যা Controller
বেস ক্লাস থেকে ইনহেরিট করে। কন্ট্রোলার এর প্রধান কাজ হলো ব্যবহারকারীর অনুরোধ (HTTP Request) গ্রহণ করা এবং উপযুক্ত মডেল থেকে ডেটা নিয়ে তা ভিউ তে পাঠানো।
public class HomeController : Controller
{
// Index অ্যাকশন মেথড
public IActionResult Index()
{
return View();
}
// About অ্যাকশন মেথড
public IActionResult About()
{
return View();
}
}
এখানে HomeController
নামক কন্ট্রোলার দুটি অ্যাকশন মেথড (Index এবং About) ধারণ করে।
অ্যাকশন মেথড হচ্ছে কন্ট্রোলারের একটি মেথড যা HTTP রিকোয়েস্টের জন্য কাস্টম লজিক প্রসেস করে এবং রেসপন্স রিটার্ন করে।
public class HomeController : Controller
{
// GET: /Home/Index
public IActionResult Index()
{
// এখানে আপনি মডেল ডেটা পাঠাতে পারেন।
return View();
}
// POST: /Home/SubmitForm
[HttpPost]
public IActionResult SubmitForm(FormData data)
{
if (ModelState.IsValid)
{
// প্রাপ্ত ডেটা প্রসেস করুন
return RedirectToAction("Success");
}
return View(data);
}
// Success অ্যাকশন
public IActionResult Success()
{
return View();
}
}
এখানে,
Index()
মেথড একটি GET অনুরোধের জন্য View রিটার্ন করে।SubmitForm(FormData data)
মেথড একটি POST অনুরোধ গ্রহণ করে এবং একটি সফল পৃষ্ঠা (Success) এ রিডিরেক্ট করে।ASP.Net MVC কন্ট্রোলারের অ্যাকশন মেথডে কিছু বিশেষ অ্যাট্রিবিউট ব্যবহার করা যেতে পারে, যেমন:
[HttpGet]
public IActionResult Edit(int id)
{
var item = dbContext.Items.Find(id);
return View(item);
}
[HttpPost]
public IActionResult Edit(int id, Item updatedItem)
{
if (ModelState.IsValid)
{
dbContext.Items.Update(updatedItem);
return RedirectToAction("Index");
}
return View(updatedItem);
}
এখানে, Edit() মেথড GET এবং POST অনুরোধের জন্য আলাদা ভাবে কাজ করছে।
/home/index
URL টা HomeController
এর Index()
অ্যাকশন মেথডে রিডিরেক্ট হবে।/home/details/5
যেখানে 5
একটি প্যারামিটার যা কন্ট্রোলার অ্যাকশন মেথডে প্রাপ্ত হবে।public IActionResult Details(int id)
{
var item = dbContext.Items.Find(id);
return View(item);
}
অ্যাকশন মেথড সাধারণত নিচের রিটার্ন ভ্যালুগুলি রিটার্ন করে:
ASP.Net কন্ট্রোলার এবং অ্যাকশন মেথডগুলি MVC আর্কিটেকচারের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলি ব্যবহার করে অ্যাপ্লিকেশন লজিক এবং ইউজার ইন্টারফেসের মধ্যে শক্তিশালী যোগাযোগ স্থাপন করা যায়।
ASP.Net MVC এবং ASP.Net Core MVC অ্যাপ্লিকেশন তৈরি করার সময় Controller হলো এমন একটি গুরুত্বপূর্ণ উপাদান, যা HTTP অনুরোধকে গ্রহণ করে, প্রয়োজনীয় ডেটা প্রস্তুত করে এবং সেই ডেটাকে View এর মাধ্যমে ব্যবহারকারীর কাছে প্রদর্শন করে। কন্ট্রোলারের মাধ্যমে অ্যাপ্লিকেশনের লজিক এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করা হয়।
Controller হলো MVC (Model-View-Controller) আর্কিটেকচারের একটি অংশ যা ইউজারের অনুরোধের ভিত্তিতে Model থেকে ডেটা নিয়ে তা View এর মাধ্যমে প্রদর্শন করে। কন্ট্রোলার ক্লাসগুলির মধ্যে সাধারণত একাধিক অ্যাকশন মেথড থাকে, যা HTTP অনুরোধের জন্য রেসপন্স তৈরি করে।
HomeController.cs
।কন্ট্রোলার ক্লাসের ভিতরে নিচের মতো কোড লিখুন:
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
// GET: /Home/
public IActionResult Index()
{
return View();
}
// GET: /Home/About
public IActionResult About()
{
return View();
}
// GET: /Home/Contact
public IActionResult Contact()
{
return View();
}
}
কন্ট্রোলার ক্লাসটির উপরে Controller ক্লাসের একটি ডেরিভেটিভ হওয়া উচিত, এবং প্রতিটি অ্যাকশন মেথডের মধ্যে সাধারণত IActionResult রিটার্ন টাইপ থাকে। নিচে একটি বেসিক কন্ট্রোলারের কোড দেখানো হলো:
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
// Index Action
public IActionResult Index()
{
return View();
}
// About Action
public IActionResult About()
{
return View();
}
}
কন্ট্রোলারে সাধারণত HTTP এর বিভিন্ন মেথডের জন্য আলাদা অ্যাকশন মেথড থাকে। কিছু সাধারণ HTTP অ্যাকশন মেথড:
সাধারণত ভিউ রেন্ডার করার জন্য ব্যবহৃত হয়, যেমন একটি পেজ লোড করা।
public IActionResult Index()
{
return View();
}
ব্যবহারকারীর থেকে ডেটা গ্রহণ করার জন্য ব্যবহৃত হয়, যেমন ফর্ম সাবমিট।
[HttpPost]
public IActionResult SubmitForm(MyModel model)
{
if (ModelState.IsValid)
{
// ডেটা প্রক্রিয়া করুন
}
return View();
}
সাধারনত ডেটা আপডেট করার জন্য ব্যবহৃত হয়।
[HttpPut]
public IActionResult UpdateData(int id, MyModel model)
{
if (ModelState.IsValid)
{
// ডেটা আপডেট করুন
}
return RedirectToAction("Index");
}
ডেটা মুছতে ব্যবহৃত হয়।
[HttpDelete]
public IActionResult DeleteData(int id)
{
// ডেটা মুছুন
return RedirectToAction("Index");
}
ASP.Net Core MVC প্রজেক্টে কন্ট্রোলারের রাউটিং এবং কনফিগারেশন Startup.cs ফাইলে করা হয়। এই ফাইলে আপনি কন্ট্রোলারগুলির রাউটিং এবং অন্যান্য কনফিগারেশন সেটআপ করতে পারেন।
Startup.cs ফাইলের মধ্যে Configure মেথডে রাউটিং কনফিগার করা হয়। সাধারণত, UseEndpoints মেথডের মধ্যে কন্ট্রোলারের রাউটিং কনফিগার করা থাকে:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
এখানে, {controller=Home}
এবং {action=Index}
ডিফল্ট কন্ট্রোলার এবং অ্যাকশন সেট করে দিয়েছে। অর্থাৎ, /
URL এ যাওয়া হলে স্বয়ংক্রিয়ভাবে HomeController এর Index অ্যাকশন কল হবে।
আপনি কন্ট্রোলারের অ্যাকশনগুলির জন্য কাস্টম রাউটও সেট করতে পারেন:
[Route("products/{id}")]
public IActionResult ProductDetails(int id)
{
var product = _context.Products.Find(id);
return View(product);
}
এই কন্ট্রোলারটি /products/5
URL এ গিয়ে ProductDetails অ্যাকশন কল করবে।
কন্ট্রোলারের অ্যাকশন মেথডগুলি সাধারণত IActionResult রিটার্ন করে, তবে আপনি সরাসরি ViewResult, RedirectToActionResult, JsonResult ইত্যাদি রিটার্ন করতে পারেন।
public IActionResult Index()
{
return View();
}
public IActionResult RedirectToHome()
{
return RedirectToAction("Index", "Home");
}
public IActionResult GetJsonData()
{
var data = new { Name = "Product", Price = 100 };
return Json(data);
}
ASP.Net MVC বা ASP.Net Core MVC এ কন্ট্রোলার তৈরি এবং কনফিগারেশন হলো অ্যাপ্লিকেশনের কার্যকরী অংশ। কন্ট্রোলারের মাধ্যমে HTTP অনুরোধগুলির জন্য ডেটা প্রক্রিয়া এবং ভিউ রেন্ডার করা হয়। কন্ট্রোলারের মধ্যে বিভিন্ন অ্যাকশন মেথড থাকে যা HTTP এর বিভিন্ন মেথডের জন্য রেসপন্স তৈরি করে। কন্ট্রোলারের রাউটিং কনফিগারেশনের জন্য Startup.cs ফাইলের মধ্যে সেটআপ করা হয়।
ASP.Net MVC অ্যাপ্লিকেশনে, অ্যাকশন মেথডস (Action Methods) হল কন্ট্রোলারের সেই মেথডগুলো যা HTTP রিকোয়েস্টের জন্য সাড়া দেয়। এই মেথডগুলো ব্যবহারকারীর রিকোয়েস্টের উপর ভিত্তি করে ডেটা রিটার্ন করে এবং সাধারণত View অথবা Redirect বা JSON রিটার্ন করে।
এখানে অ্যাকশন মেথডস এবং তাদের বিভিন্ন Return Types নিয়ে বিস্তারিত আলোচনা করা হলো।
অ্যাকশন মেথড একটি পাবলিক মেথড হিসেবে কন্ট্রোলার ক্লাসের মধ্যে ডিফাইন করা হয়। এই মেথডটি HTTP রিকোয়েস্টের প্রতি সাড়া প্রদান করে এবং সাধারণত View, Redirect, JSON, PartialView ইত্যাদি রিটার্ন করে।
using Microsoft.AspNetCore.Mvc;
namespace MyFirstAspNetApp.Controllers
{
public class HomeController : Controller
{
// Action Method: Returns a View
public IActionResult Index()
{
return View();
}
// Action Method: Returns a Redirect
public IActionResult RedirectToAbout()
{
return RedirectToAction("About");
}
// Action Method: Returns JSON Data
public IActionResult GetJsonData()
{
var data = new { Name = "John", Age = 30 };
return Json(data);
}
}
}
অ্যাকশন মেথড বিভিন্ন ধরনের রিটার্ন টাইপ ব্যবহার করতে পারে, যা নিচে ব্যাখ্যা করা হলো:
উদাহরণ:
public IActionResult Index()
{
return View(); // Renders the default view (Index.cshtml)
}
উদাহরণ:
public IActionResult RedirectToAbout()
{
return RedirectToAction("About"); // Redirects to the About action method
}
উদাহরণ:
public IActionResult GetJsonData()
{
var data = new { Name = "John", Age = 30 };
return Json(data); // Returns JSON data
}
উদাহরণ:
public IActionResult GetPartialView()
{
return PartialView("_MyPartialView"); // Renders a partial view
}
উদাহরণ:
public IActionResult GetContent()
{
return Content("Hello, this is a plain text response."); // Returns plain text
}
উদাহরণ:
public IActionResult DownloadFile()
{
var filePath = "path/to/file.pdf";
return File(filePath, "application/pdf", "downloadedfile.pdf"); // Returns a file for download
}
উদাহরণ:
public IActionResult Index()
{
return View(); // IActionResult type
}
public ActionResult About()
{
return View(); // ActionResult type
}
অ্যাকশন মেথডগুলিতে আপনি নির্দিষ্ট Attributes ব্যবহার করতে পারেন, যেমন [HttpGet], [HttpPost], [Route] ইত্যাদি।
উদাহরণ:
[HttpGet]
public IActionResult GetData()
{
return Json(new { message = "This is a GET request" });
}
[HttpPost]
public IActionResult PostData([FromBody] MyModel model)
{
return Json(new { message = "Data received", model });
}
এভাবে ASP.Net অ্যাপ্লিকেশনে বিভিন্ন ধরনের অ্যাকশন মেথডস এবং তাদের Return Types ব্যবহার করে আপনি প্রোজেক্টের কার্যকারিতা এবং পারফরম্যান্স কাস্টমাইজ করতে পারেন।
Routing এবং URL Mapping হলো ASP.Net এ HTTP রিকোয়েস্টকে সঠিক কন্ট্রোলার বা অ্যাকশন এর সাথে সংযুক্ত করার প্রক্রিয়া। এটি একটি গুরুত্বপূর্ণ অংশ যা অ্যাপ্লিকেশন পরিচালনার জন্য উপযুক্ত রিকোয়েস্ট প্রক্রিয়াকরণ নিশ্চিত করে।
Routing হলো একটি কৌশল যা HTTP রিকোয়েস্ট URL এর ভিত্তিতে সঠিক কন্ট্রোলার এবং অ্যাকশন নির্বাচন করতে সাহায্য করে। ASP.Net MVC এবং ASP.Net Core এ, রাউটিং একটি URL pattern (যেমন /home/index
) ব্যবহার করে কন্ট্রোলারের নির্দিষ্ট অ্যাকশনে রিকোয়েস্টটি পাঠায়।
ASP.Net রাউটিং সিস্টেম, URL এবং Controller এর মধ্যে সম্পর্ক স্থাপন করে, যাতে যে রিকোয়েস্ট পাঠানো হচ্ছে সেটি সঠিকভাবে প্রক্রিয়া করা হয়।
ASP.Net MVC এ রাউটিংকে Route Table এর মাধ্যমে কনফিগার করা হয়। প্রাথমিকভাবে, RouteConfig.cs
ফাইলের মধ্যে রাউটিং কনফিগারেশন করা হয়।
RouteConfig.cs ফাইলের উদাহরণ:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Default route configuration
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
UrlParameter.Optional
: প্যারামিটার ঐচ্ছিক।এখানে, {controller}/{action}/{id}
হলো URL pattern, যার মাধ্যমে রিকোয়েস্ট কন্ট্রোলার এবং অ্যাকশন এর সাথে ম্যাপ হবে।
ASP.Net Core তে রাউটিং কনফিগারেশনটা একটু ভিন্ন। এখানে Startup.cs ফাইলে রাউটিং কনফিগার করা হয় এবং Middleware ব্যবহার করে রিকোয়েস্ট হ্যান্ডলিং করা হয়।
ASP.Net Core তে রাউটিং কনফিগার করতে, প্রথমে ConfigureServices মেথডে সার্ভিস অ্যাড করতে হয় এবং পরে Configure মেথডে রাউটিং মডিউল ব্যবহার করতে হয়।
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(); // MVC এর জন্য সার্ভিস অ্যাড
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseRouting(); // রাউটিং মধ্য়স্থলে যুক্ত করা
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
{controller=Home}/{action=Index}/{id?}
হলো রাউটিং প্যাটার্ন, যেখানে controller
, action
এবং id
মান ম্যাপ হয়।URL Mapping হলো একটি কৌশল যা URL প্যাটার্নকে কোডের নির্দিষ্ট অংশ (যেমন কন্ট্রোলার এবং অ্যাকশন) এর সাথে সম্পর্কিত করে। এটি রাউটিংয়ের একটি অংশ এবং URL ম্যানিপুলেশন সিস্টেমকে সহজ করে।
/home/index
HomeController
Index
/product/details/5
ProductController
Details
5
{controller}/{action}/{id?}
, যেখানে id
ঐচ্ছিক।{category}/{id}
।ASP.Net এ Route Constraints ব্যবহার করে আপনি URL প্যারামিটারগুলোর জন্য নির্দিষ্ট শর্ত আরোপ করতে পারেন। এটি রাউটিং সিস্টেমে আরও সুনির্দিষ্ট নিয়ন্ত্রণ প্রদান করে।
routes.MapRoute(
name: "ProductDetails",
url: "product/{id}",
defaults: new { controller = "Product", action = "Details" },
constraints: new { id = @"\d+" } // এখানে id শুধুমাত্র ডিজিট হতে পারে
);
এখানে constraints
ব্যবহার করে id
প্যারামিটার শুধুমাত্র ডিজিট হতে হবে (যেমন product/123
ঠিক থাকবে, কিন্তু product/abc
হবে না)।
ASP.Net MVC বা Core এ আপনি Areas ব্যবহার করে বড় অ্যাপ্লিকেশনগুলো মডুলার করে সাজাতে পারেন। এর মাধ্যমে একটি অ্যাপ্লিকেশনের ভিন্ন ভিন্ন সেকশন বা মডিউলকে আলাদা রাউটিং প্যাটার্নে ভাগ করা যায়।
public class AreaRegistration : AreaRegistration
{
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Area_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
);
}
}
এখানে Admin এর জন্য আলাদা রাউটিং তৈরি করা হয়েছে।
ASP.Net এ Parameter Binding এবং Query Strings হল দুইটি গুরুত্বপূর্ণ ফিচার যা URL এবং HTTP রিকোয়েস্ট থেকে ডেটা সংগ্রহ এবং পরিচালনা করতে ব্যবহৃত হয়। এগুলি বিশেষভাবে ওয়েব অ্যাপ্লিকেশনে ইউজার ইন্টারঅ্যাকশন এবং ডেটা পাস করার জন্য গুরুত্বপূর্ণ।
Parameter Binding হলো সেই প্রক্রিয়া যেখানে ASP.Net কন্ট্রোলার মেথডগুলির প্যারামিটারগুলোর মান স্বয়ংক্রিয়ভাবে HTTP রিকোয়েস্ট থেকে পূর্ণ হয়। এর মাধ্যমে ইউজার থেকে প্রাপ্ত ইনপুট সহজেই কন্ট্রোলারে পাঠানো যায় এবং প্রসেস করা হয়।
ASP.Net MVC তে, URL বা ফর্ম ডাটা থেকে কন্ট্রোলারের প্যারামিটার গুলো স্বয়ংক্রিয়ভাবে বাইন্ড হয়ে যায়। এটি বিভিন্ন উৎস থেকে (যেমন: Query Strings, Form Data, Route Data) প্যারামিটারগুলোর মান গ্রহণ করতে পারে।
ASP.Net MVC তে URL রাউটিংয়ের মাধ্যমে প্যারামিটারগুলি কন্ট্রোলারের প্যারামিটারগুলির সাথে বাউন্ড হতে পারে। উদাহরণস্বরূপ:
public ActionResult ShowProduct(int id)
{
var product = db.Products.Find(id);
return View(product);
}
/Product/ShowProduct/5
, তবে id
প্যারামিটারটি 5 দিয়ে পূর্ণ হবে।/Product/ShowProduct?id=5
কন্ট্রোলার মেথড:
public ActionResult ShowProduct(int id)
{
var product = db.Products.Find(id);
return View(product);
}
id
প্যারামিটারটি query string থেকে স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।ফর্মের মাধ্যমে ডাটা পাঠানোর জন্য POST মেথড ব্যবহৃত হয়। ফর্মের ইনপুট ফিল্ডগুলোর মান কন্ট্রোলারের প্যারামিটার বা মডেল প্রপার্টির সাথে স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।
<form method="post">
<input type="text" name="name" />
<input type="submit" value="Submit" />
</form>
[HttpPost]
public ActionResult SubmitForm(string name)
{
// name প্যারামিটারটি ফর্ম থেকে আসবে
return Content("Hello, " + name);
}
Query Strings URL এর অংশ, যা ? চিহ্ন দ্বারা শুরু হয় এবং একাধিক প্যারামিটার এবং মানের জোড়াকে &
দিয়ে আলাদা করা হয়। Query strings সাধারণত ইউজারের ইনপুট বা ডেটা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়।
Query String সাধারণত URL এ অ্যাপেন্ড হয়ে থাকে এবং কন্ট্রোলারে প্যারামিটার হিসেবে ইনপুট পাস করে। এই তথ্যটি HttpContext.Request.QueryString বা সরাসরি কন্ট্রোলারের প্যারামিটারগুলির মাধ্যমে প্রাপ্ত করা যায়।
https://example.com/Product/Details?id=123&category=electronics
কন্ট্রোলার:
public ActionResult Details(int id, string category)
{
var product = db.Products.Find(id);
ViewBag.Category = category;
return View(product);
}
Request.QueryString ব্যবহার করে, আপনি URL থেকে প্যারামিটারগুলির মান সরাসরি নিতে পারেন:
public ActionResult Index()
{
string id = Request.QueryString["id"];
string category = Request.QueryString["category"];
return Content("ID: " + id + ", Category: " + category);
}
ASP.Net Core তেও একইভাবে প্যারামিটার বাইন্ডিং এবং Query Strings ব্যবহার করা হয়, তবে এখানে Model Binding এবং Binding from the Body এর আরও উন্নত ব্যবস্থাপনা পাওয়া যায়।
/Product/Details?id=5&category=electronics
কন্ট্রোলার:
public IActionResult Details(int id, string category)
{
var product = db.Products.Find(id);
ViewData["Category"] = category;
return View(product);
}
ASP.Net Core তে, আপনি Query String
, Route
, এবং Body
থেকে প্যারামিটার বাউন্ড করতে পারবেন এবং Model Binding এর মাধ্যমে একাধিক প্যারামিটার স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।
ASP.Net এ Parameter Binding এবং Query Strings এর মাধ্যমে ডেটা পাস করার কাজটি সহজ হয়। Parameter Binding ডেভেলপারদের কোডের মধ্যে বিভিন্ন ডেটা সোর্স থেকে প্যারামিটার গুলি স্বয়ংক্রিয়ভাবে বাউন্ড করতে সাহায্য করে, যেখানে Query Strings URL এর মাধ্যমে ডেটা পাঠানোর একটি সাধারণ পদ্ধতি।
Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন যা কম্পোনেন্টগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি ইনজেক্ট করার জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনগুলিতে Dependency Injection খুবই গুরুত্বপূর্ণ এবং এটি বিল্ট-ইন ভাবে সমর্থিত, যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজ করে তোলে।
Dependency Injection (DI) একটি প্রযুক্তি যা ক্লাসগুলোর মধ্যে ব্যবহৃত ডিপেনডেন্সি (যেমন সার্ভিস, অবজেক্ট, বা রিসোর্স) বাইরের কোনো উৎস থেকে ইনজেক্ট করে, যাতে সেই ক্লাসগুলি সরাসরি তাদের ডিপেনডেন্সি তৈরি না করে। এর ফলে কোডের মডুলারিটি, রিইউজেবিলিটি এবং টেস্টেবিলিটি বৃদ্ধি পায়।
ASP.Net Core এ, DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনকে আরও বেশি ফ্লেক্সিবল, স্কেলেবল এবং টেস্টযোগ্য করা হয়।
ASP.Net Core-এর Startup.cs ফাইলে ConfigureServices মেথডে নির্দিষ্ট পরিষেবাগুলোর জন্য ডিপেনডেন্সি রেজিস্টার করা হয় এবং Configure মেথডে সেই পরিষেবাগুলি কনফিগার ও ব্যবহার করা হয়।
ASP.Net Core এর DI এর মূল উপাদানগুলো হলো:
একটি ইন্টারফেস তৈরি করুন যা আপনার সার্ভিসের জন্য শর্তাবলী নির্ধারণ করবে।
public interface IProductService
{
IEnumerable<string> GetAllProducts();
}
এখন, সেই ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি ক্লাস তৈরি করুন।
public class ProductService : IProductService
{
public IEnumerable<string> GetAllProducts()
{
return new List<string> { "Product 1", "Product 2", "Product 3" };
}
}
এখন, Startup.cs ফাইলে ConfigureServices মেথডে এই সার্ভিসটি রেজিস্টার করুন।
public void ConfigureServices(IServiceCollection services)
{
// DI কন্টেনারে সার্ভিস রেজিস্টার করা
services.AddScoped<IProductService, ProductService>();
services.AddControllersWithViews();
}
এখানে, AddScoped
ব্যবহার করা হয়েছে, যার মানে হল সার্ভিসটি HTTP request এর জন্য Scoped হবে। অর্থাৎ, একই HTTP অনুরোধের মধ্যে একাধিক কন্ট্রোলারে একই ইনস্ট্যান্স ব্যবহার হবে, কিন্তু নতুন HTTP অনুরোধের জন্য নতুন ইনস্ট্যান্স তৈরি হবে।
এখন আপনার কন্ট্রোলারে এই সার্ভিসটি ইনজেক্ট করুন। কন্ট্রোলারে Constructor Injection ব্যবহার করা হয়।
public class HomeController : Controller
{
private readonly IProductService _productService;
// DI মাধ্যমে সার্ভিস ইনজেক্ট করা হচ্ছে
public HomeController(IProductService productService)
{
_productService = productService;
}
public IActionResult Index()
{
var products = _productService.GetAllProducts();
return View(products);
}
}
এখন HomeController এর মধ্যে ইনজেক্ট করা সার্ভিসটি ব্যবহার করা হচ্ছে, যা কন্ট্রোলারের Index()
অ্যাকশনে GetAllProducts()
মেথডের মাধ্যমে ডেটা রিটার্ন করছে।
ASP.Net Core DI সিস্টেম তিনটি ধরনের লাইফটাইম সাপোর্ট করে:
Transient: প্রতিটি অনুরোধে নতুন ইনস্ট্যান্স তৈরি হবে।
services.AddTransient<IProductService, ProductService>();
Scoped: প্রতিটি HTTP অনুরোধে একটি ইনস্ট্যান্স থাকবে।
services.AddScoped<IProductService, ProductService>();
Singleton: পুরো অ্যাপ্লিকেশনে একমাত্র ইনস্ট্যান্স ব্যবহার হবে।
services.AddSingleton<IProductService, ProductService>();
ASP.Net Core অ্যাপ্লিকেশনগুলোতে Dependency Injection (DI) ব্যবহারের মাধ্যমে আপনি সহজে সার্ভিসগুলো রেজিস্টার, ম্যানেজ এবং কনফিগার করতে পারেন, যা কোডের মডুলারিটি, স্কেলেবিলিটি, এবং টেস্টেবিলিটি বৃদ্ধি করে। DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে low coupling এবং high cohesion নিশ্চিত করা সম্ভব হয়, যা একে সহজে মেইনটেইন এবং আপডেট করা যায়।
Read more