SignalR ve Dependency Injection Kullanımı


SignalR ve Dependency Injection Kullanımı

Modern web uygulamalarında gerçek zamanlı iletişim ve yönetilebilir bir mimari oluşturmak için SignalR ve Dependency Injection kavramları büyük bir yer tutmaktadır. SignalR, .NET ekosisteminde istemci ile sunucu arasında çift yönlü iletişim sağlarken, Dependency Injection ise yazılım bileşenlerini gevşek bağlı hale getirerek kodun sürdürülebilirliğini ve test edilebilirliğini artırır. Bu makalede SignalR ve Dependency Injection kullanımı detaylı bir şekilde ele alınacaktır.

SignalR Nedir ve Nasıl Çalışır?

SignalR, ASP.NET Core çatısı altında çalışan, istemciler ve sunucu arasında gerçek zamanlı veri iletimi imkanı sunan bir kütüphanedir. Özellikle chat uygulamaları, canlı skor sistemleri veya gerçek zamanlı bildirimlerde kullanılır. SignalR çalışma mantığında Hub adı verilen merkezler üzerinden iletişim kurulmaktadır. Hub sınıfları, istemciye veri göndermek ve almak için temel görevi üstlenir.


using Microsoft.AspNetCore.SignalR;

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

Dependency Injection ile SignalR Entegrasyonu

Dependency Injection (DI), SignalR Hub'larının bağımlılıklarını otomatik olarak yönetmek için kullanılır. Merkezi hizmet sağlayıcı üzerinden gerekli servisler Hub'lara kolayca enjekte edilir. Bu yöntemle, ILogger, veri tabanı servisleri veya özel yapılanmış servisler doğrudan Hub sınıflarına bir constructor ile aktarılabilir. Böylece servislerin yönetimi merkezi ve sürdürülebilir olur.


public class NotifierService
{
    public void Notify(string message) { /* Bildirim işlemleri */ }
}

public class NotificationHub : Hub
{
    private readonly NotifierService _notifier;
    
    public NotificationHub(NotifierService notifier)
    {
        _notifier = notifier;
    }

    public async Task SendNotification(string user, string message)
    {
        _notifier.Notify(message);
        await Clients.User(user).SendAsync("ReceiveNotification", message);
    }
}

Dependency Injection için Service Kaydı

SignalR ile Dependency Injection kullanmak için ilgili servisleri Startup.cs ya da Program.cs üzerinde kaydetmek gereklidir:


services.AddSingleton<NotifierService>();
services.AddSignalR();

Sonuç: SignalR ve DI ile Modern Mimari

SignalR ve Dependency Injection bir arada kullanıldığında hem gerçek zamanlı iletişim hem de modüler, sürdürülebilir bir mimari kolayca kurulur. Özellikle büyük ölçekli ve ölçeklenebilir projelerde, bağımlılıkların yönetimi ve kodun test edilebilirliği açısından SignalR ve Dependency Injection vazgeçilmez araçlar arasında yer alır. SignalR ve Dependency Injection kavramlarını birlikte kullanarak, günümüzün modern uygulama gereksinimlerini karşılayabilirsiniz.