ASP.NET Core'da Dependency Injection Nasıl Çalışır?

ASP.NET Core'un en güçlü özelliklerinden biri, Dependency Injection (DI) konteynerinin framework'ün içine entegre edilmiş olmasıdır. Bu sayede bağımlılıkları merkezi bir yerden yönetebilir ve test edilebilir kod yazabilirsiniz.

Bir sınıf başka bir sınıfa ihtiyaç duyduğunda, o sınıfı içinde oluşturmak yerine dışarıdan alması daha iyi bir yaklaşımdır. Bu sayede sınıflar birbirinden bağımsız hale gelir ve değişiklik yapması kolaylaşır.

Service Registration: Startup.cs veya Program.cs dosyasında servisleri DI konteynerine kaydedersiniz. Service Lifetime ise üç türde olur: Transient (her istek için yeni instance), Scoped (istek başına bir instance) ve Singleton (uygulama ömrü boyunca bir instance).

Önce bir interface ve implementasyon yazalım:

1public interface IEmailService
2{
3Task SendEmailAsync(string to, string message);
4}
5
6public class EmailService: IEmailService
7{
8public Task SendEmailAsync(string to, string message)
9{
10// Email gönderme işlemi
11Console.WriteLine($"Email gönderildi: {to}");
12return Task.CompletedTask;
13}
14}

Şimdi Program.cs'de servisi kaydedelim:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1var builder = WebApplication.CreateBuilder(args);
2
3// DI konteynerine servisi ekle
4builder.Services.AddScoped<IEmailService, EmailService>();
5
6var app = builder.Build();

Controller'da kullanımı:

1public class UserController: ControllerBase
2{
3private readonly IEmailService _emailService;
4
5// DI konteyner otomatik olarak IEmailService'i inject eder
6public UserController(IEmailService emailService)
7{
8_emailService = emailService;
9}
10
11[HttpPost]
12public async Task<IActionResult> Register(string email)
13{
14await _emailService.SendEmailAsync(email, "Hoşgeldiniz!");
15return Ok();
16}
17}

Transient: Stateless servislerde (örneğin logger). Her çağrıda yeni instance oluşturulur.

Scoped: Veritabanı bağlantıları, DbContext. HTTP isteği boyunca aynı instance kullanılır.

Singleton: Konfigürasyon, cache servisleri. Uygulama hayatı boyunca tek instance.

DI, ASP.NET Core uygulamalarını daha temiz, test edilebilir ve bakımı kolay hale getiren temel bir mekanizmadır. Doğru lifetime seçimi performans ve bellek yönetimi açısından kritik önem taşır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • adlı kullanıcıya yanıt verdi
    pazartesiyorgunu

    ya işte o yüzden şimdi bu DI şeyi çok iyi geldi mocklar sayesinde gerçek veritabanı

  • adlı kullanıcıya yanıt verdi
    kucuksehir

    o zaman her test için gerçek veritabanıyla çalışmak zorunda kalıyordun herhalde çok yavaş

  • adlı kullanıcıya yanıt verdi
    pazartesiyorgunu

    aynen ya test etmek de çok zordu eskiden mock filan yapamıyordun gerçek nesneyle çalışmak

  • adlı kullanıcıya yanıt verdi
    kucuksehir

    aynen şimdi bi de değiştirmek lazım gelirse bir yerde bütün kodu çevirmen gerekiyordu

  • pazartesiyorgunu

    eskiden böyle rahat değildi ya her sınıfın içinde kendisi oluşturması gerekiyordu