Dependency Injection nedir? ASP.NET Core projelerinde nasıl kullanılır?

Arkadaşlar merhaba bu yazımda, ASP.NET Core projelerinde çok kullandığımız Dependency Injection kavramından ve yaşam döngüsünden bahsedeceğim.
Dependency Injection nedir?
Dependency Injection (Bağımlılık Enjeksiyonu), yazılım geliştirme sürecinde, bir bileşenin başka bir bileşene bağımlılıklarını doğrudan kendisi yönetmek yerine, bu bağımlılıkların dışarıdan enjekte edilmesi prensibine dayanır. Bu, kodun daha modüler, test edilebilir ve bakımı daha kolay hale gelmesini sağlar. ASP.NET Core, bu prensibi destekleyen ve uygulamanın çeşitli bileşenlerine bağımlılıkların enjekte edilmesine olanak tanıyan bir framework sunar.
Servis Bağlamak (Service Registration)
ASP.NET Core’da Dependency Injection kullanmaya başlamak için, öncelikle bağımlılıkların hangi servis sınıflarına karşılık geldiğini belirtmemiz gerekiyor. Bu adım, genellikle Startup.cs dosyasında gerçekleştirilir. Aşağıdaki örnekte, IService arabirimine karşılık gelen MyService sınıfını servis olarak kaydediyoruz:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IService, MyService>();
// Diğer servis bağlama işlemleri
}
AddScoped, servisin bir kapsam (scope) içinde bir kez oluşturulacağını ve o kapsamdan farklı taleplerde aynı örneğin kullanılacağını belirtir. Diğer seçenekler arasında AddTransient (her talepte yeni bir örnek) ve AddSingleton (uygulama boyunca bir örnek) bulunur.
Bağımlılıkları Enjekte Etme
Bağımlılıkları kullanmak için, bunları ihtiyaç duyulan bileşenin kurucusuna enjekte edebiliriz. Örneğin, bir kontrolör sınıfında bağımlılığı enjekte etmek için şu şekilde yapabiliriz:
public class MyController : Controller
{
private readonly IService _myService;
public MyController(IService myService)
{
_myService = myService;
}
// Controller içinde _myService kullanabilirsiniz
}
ASP.NET Core, Controller sınıfları gibi birçok bileşeni otomatik olarak yönetir ve gerekli bağımlılıkları enjekte eder.
Scoped Servisler ve HTTP İstekleri
Scoped servisler, her HTTP isteği için ayrı bir örneğin oluşturulduğu, ancak aynı istek içinde farklı bileşenler arasında paylaşıldığı bir kapsam sağlar. Bu, özellikle web uygulamalarında kullanışlıdır. Örneğin, HttpContext’e erişen bir servis tanımlamak için:
services.AddScoped<IMyHttpContextService, MyHttpContextService>();
Ardından, bu servisi bir Controller’da kullanabilirsiniz:
public class MyController : Controller
{
private readonly IMyHttpContextService _contextService;
public MyController(IMyHttpContextService contextService)
{
_contextService = contextService;
}
// _contextService'i kullanabilirsiniz
}
Sonuç:
ASP.NET Core’da Dependency Injection kullanmak, kodunuzun daha temiz, bakımı daha kolay ve test edilebilir olmasına katkı sağlar. Servislerin bağlanması ve bağımlılıkların enjekte edilmesi, uygulama geliştirmenizi daha etkili ve modüler hale getirecek bir tasarım prensibi sunar.
Hasan Asla (Software Developer)