YÜKLENİYOR...

ASP.NET Core'da Dependency Injection Nedir? Nasıl Kullanılır?

ASP.NET Core'da Dependency Injection Nedir? Nasıl Kullanılır?
Bağımlılıkların yönetimi, yazılım geliştirme sürecinin temel taşlarından biridir. Birçok yazılımda, bir sınıfın diğer sınıflara olan bağımlılıkları düzgün şekilde yönetilmezse, kod karmaşık ve bakım zor hale gelebilir. ASP.NET Core, Dependency Injection (

Bağımlılıkların yönetimi, yazılım geliştirme sürecinin temel taşlarından biridir.
Birçok yazılımda, bir sınıfın diğer sınıflara olan bağımlılıkları düzgün şekilde yönetilmezse, kod karmaşık ve bakım zor hale gelebilir.
ASP.NET Core, Dependency Injection (DI) (Bağımlılık Enjeksiyonu) ile bu problemi çözmeyi kolaylaştırır. DI, bir sınıfın ihtiyaç duyduğu bağımlılıkları dışarıdan almasını sağlayarak, yazılımın test edilebilirliğini artırır, kodun yeniden kullanılabilirliğini kolaylaştırır ve bağımlılıkları yönetmeyi basitleştirir.

Teknik Açıklama

Dependency Injection, sınıfların bağımlılıklarını doğrudan yaratmak yerine dışarıdan almasını sağlar.
ASP.NET Core'da DI, uygulama başlatıldığında yapılandırılır ve nesnelerin yönetimi daha merkezi hale gelir.
Bu yaklaşım, Loose Coupling (Gevşek Bağlantı) prensibini destekler, yani sınıflar birbirinden bağımsız bir şekilde çalışabilir.

DI’nin Temel Çalışma Prensibi

ASP.NET Core'da DI, genellikle üç temel servis türünde yapılır:

  1. Transient: Her istek için yeni bir örnek oluşturulur. Kısa ömürlü servisler için uygundur.

  2. Scoped: Her HTTP isteği başına bir örnek oluşturulur. Uygulama içindeki servisler için idealdir.

  3. Singleton: Uygulama başladığı andan itibaren tek bir örnek kullanılır. Ömür boyu var olan servisler için uygundur.

DI'yi ASP.NET Core Uygulamasına Entegre Etme

ASP.NET Core, DI'yi yapısal olarak destekler. DI'yi kullanmaya başlamak için, bağımlılıkları Startup.cs dosyasında yapılandırmamız gerekir.

  1. Servisleri Kaydetme: ConfigureServices metodunda servisleri ekleriz.

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IEmailService, EmailService>();
    services.AddScoped<IUserService, UserService>();
    services.AddSingleton<ILoggingService, LoggingService>();
}

Bu örnekte, IEmailService için EmailService'i Transient, IUserService için Scoped, ve ILoggingService için Singleton servislerini kaydettik.

  1. Bağımlılığı Kullanma: DI, servislere bağımlılıkları enjekte ederek kullanılabilir.
    Controller sınıfında, bağımlılıklar doğrudan constructor aracılığıyla alınır.

public class HomeController : Controller
{
    private readonly IEmailService _emailService;

    public HomeController(IEmailService emailService)
    {
        _emailService = emailService;
    }

    public IActionResult Index()
    {
        _emailService.SendEmail("test@example.com", "Test Subject", "Hello, world!");
        return View();
    }
}

Yukarıdaki örnekte, HomeController constructor'ında IEmailService bağımlılığı enjekte edilmiştir.

Küçük Bir Kod Örneği

Aşağıda, Dependency Injection kullanımına dair basit bir örnek gösterilmektedir. Bu örnekte, bir kullanıcı servisinden bağımlılığı alıp işlem yapıyoruz.

1. Servis Arayüzü ve Uygulaması:

public interface IUserService
{
    void CreateUser(string name);
}

public class UserService : IUserService
{
    public void CreateUser(string name)
    {
        Console.WriteLine($"Kullanıcı {name} oluşturuldu.");
    }
}

2. Startup.cs Dosyasındaki Servis Kaydı:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IUserService, UserService>();
}

3. Controller'da Kullanım:

public class HomeController : Controller
{
    private readonly IUserService _userService;

    public HomeController(IUserService userService)
    {
        _userService = userService;
    }

    public IActionResult CreateUser()
    {
        _userService.CreateUser("Ali");
        return View();
    }
}

Bu örnekte, IUserService servisi, HomeController'a DI yoluyla enjekte edilir. Kullanıcı oluşturulurken bu servis kullanılır.

 

Dependency Injection, özellikle büyük ve karmaşık uygulamalarda faydalıdır.
DI sayesinde:

  • Test edilebilirlik artar. Bağımlılıklar dışarıdan enjekte edildiği için test sırasında sahte servisler (mock services) kullanılabilir.

  • Bakım kolaylaşır. Sınıflar birbirinden bağımsız çalıştığı için, bir sınıfta yapılan değişiklikler diğerlerini etkilemez.

  • Kodun modülerliği sağlanır. Her servisin yalnızca ihtiyacı olan servislere bağımlı olması, uygulamanın daha esnek ve sürdürülebilir olmasına yardımcı olur.

ASP.NET Core'da Dependency Injection kullanmak, yazılım geliştirmeyi daha kolay, hızlı ve sürdürülebilir hale getirir.