MAUI Dependency Injection Kullanımı ve İpuçları


MAUI Dependency Injection Kullanımı ve İpuçları

.NET MAUI (Multi-platform App UI), modern mobil ve masaüstü uygulamaları geliştirmek için kullanılan çapraz platform bir çerçevedir. MAUI'nin öne çıkan özelliklerinden biri, Dependency Injection (Bağımlılık Enjeksiyonu) altyapısının yerleşik olarak desteklenmesidir. MAUI Dependency Injection, kodunuzu daha modüler, test edilebilir ve bakımı kolay hale getirir. Bu yazıda, MAUI uygulamalarında Dependency Injection'ın nasıl kullanılacağını adım adım öğrenecek ve dikkat edilmesi gereken pratik ipuçlarını keşfedeceksiniz.

MAUI'de Dependency Injection Mantığı

MAUI projelerinde bağımlılıkları çözmek için arka planda Microsoft.Extensions.DependencyInjection kullanılır. Proje başlatılırken MauiProgram.cs dosyasındaki CreateMauiApp metodunda servislerinizi ekleyerek başlayabilirsiniz:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts => {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });
    
    // Servisleri ekle
    builder.Services.AddSingleton<IMyService, MyService>();
    
    return builder.Build();
}

Yukarıdaki örnekte IMyService arayüzü ve buna karşılık gelen MyService implementasyonu DI konteynerine eklenmiştir. Artık ihtiyacınız olan herhangi bir sayfa veya ViewModel'de doğrudan bu servisi dependency injection ile kullanabilirsiniz:

public class MainPageViewModel
{
    private readonly IMyService _myService;
    public MainPageViewModel(IMyService myService)
    {
        _myService = myService;
    }
}

MAUI Dependency Injection Kullanırken Dikkat Edilmesi Gerekenler

Kayıt Tipleri: Singleton, Transient, Scoped

Singleton ile bir servisin uygulama başından sonuna kadar tek bir örneği kullanılır. Transient her talepte yeni bir nesne oluşturur. MAUI uygulamalarında Scoped kaydı varsayılan olarak önerilmez, çoğunlukla Singleton ve Transient tercih edilir.

// Singleton kullanım örneği
builder.Services.AddSingleton<IMyService, MyService>();
// Transient kullanım örneği
builder.Services.AddTransient<IOtherService, OtherService>();

ViewModel ve Sayfa Navigasyonu

MAUI'de sayfaları ve ViewModel'leri dependency injection ile enjekte ederek navigation işlemlerinde esneklik sağlayabilirsiniz. Örneğin bir sayfaya ViewModel'i DI ile bağlamak için:

builder.Services.AddTransient<MainPageViewModel>();
builder.Services.AddTransient<MainPage>();

Bu yaklaşım, test yazımı sırasında mock servis ekleme işlemini de kolaylaştırır.

Sonuç: MAUI Dependency Injection'ın Sağladıkları

MAUI Dependency Injection ile büyük ve karmaşık uygulamalarda bile bağımlılıkları yönetmek oldukça kolaylaşır. Bu yapı kodunuzun okunabilirliğini, sürdürülebilirliğini ve test edilebilirliğini artırır. Doğru konfigürasyon ve kapsam seçimleriyle, MAUI uygulamalarında Dependency Injection kullanarak modern yazılım geliştirme pratiklerini rahatça uygulayabilirsiniz.