
Dependency Injection در ASP.NET Core: چرا و چگونه استفاده کنیم
در برنامهنویسی مدرن، مدیریت وابستگیها و کاهش Coupling بین کلاسها یکی از اصول مهم است. Dependency Injection (DI) به شما کمک میکند وابستگیها را به صورت منظم و قابل تست مدیریت کنید. ASP.NET Core به صورت پیشفرض DI را پشتیبانی میکند و توسعهدهندگان میتوانند با استفاده از آن برنامههای مقیاسپذیر و قابل نگهداری بسازند.
چرا Dependency Injection مهم است؟
- کاهش Coupling: کلاسها مستقلتر میشوند و تغییر در یک کلاس کمتر باعث مشکلات در کلاسهای دیگر میشود.
- قابلیت تست آسانتر: با استفاده از DI میتوان وابستگیها را Mock یا Stub کرد و Unit Test نوشت.
- مدیریت بهتر منابع: سرویسها و کلاسها تنها زمانی که نیاز است ایجاد و استفاده میشوند.
نحوه استفاده از Dependency Injection در ASP.NET Core
ASP.NET Core یک Service Container قدرتمند دارد که میتواند سرویسها را در سرتاسر برنامه مدیریت کند. مراحل اصلی شامل ثبت سرویس و سپس استفاده از آن در کلاسها است.
۱. ثبت سرویسها
در کلاس Program.cs یا Startup.cs میتوانید سرویسها را ثبت کنید:
builder.Services.AddTransient<IMyService, MyService>();
builder.Services.AddScoped<IOtherService, OtherService>();
builder.Services.AddSingleton<ISingletonService, SingletonService>();
۲. استفاده از سرویسها در کنترلر یا کلاسها
بعد از ثبت سرویسها، میتوانید آنها را در کنترلرها یا کلاسهای دیگر از طریق Constructor Injection دریافت کنید:
public class HomeController : Controller
{
private readonly IMyService _myService;
public HomeController(IMyService myService)
{
_myService = myService;
}
public IActionResult Index()
{
var data = _myService.GetData();
return View(data);
}
}
بهترین شیوهها در استفاده از DI
- از Constructor Injection به جای Service Locator استفاده کنید.
- سرویسهای Scoped یا Singleton را بسته به نیاز و طول عمر مناسب انتخاب کنید.
- از Inject کردن DbContext یا سرویسهای سنگین در Singleton خودداری کنید.
- وابستگیها را ساده و کم نگه دارید تا مدیریت و تست راحتتر باشد.
جمعبندی
Dependency Injection در ASP.NET Core ابزار بسیار قدرتمندی برای ساخت برنامههای قابل نگهداری و تستپذیر است. با رعایت بهترین شیوهها و استفاده صحیح از سرویسها، میتوانید برنامههایی با Coupling پایین، خوانایی بالا و عملکرد مناسب بسازید.