CodeBlanks Logo Icon CodeBlanks

ServiceCollection

C# kursu · İleri seviye · Ders 57/83

Microsoft.Extensions.DependencyInjection ServiceCollection'ı öğrenirsin.

ServiceCollection

Microsoft.Extensions.DependencyInjection.ServiceCollection, .NET'in resmi DI kapsayıcısıdır. Servisleri AddTransient, AddScoped veya AddSingleton ile kaydedersin; BuildServiceProvider() ile bir sağlayıcı üretirsin.

Sağlayıcıdan provider.GetRequiredService<T>() ile kayıtlı servisi alırsın. Kapsayıcı, bağımlılıkları otomatik çözer: servis başka bir bağımlılık gerektiriyorsa, kapsayıcı onu da örnekleyip geçer. Bu, özellikle orta ve büyük uygulamalarda önemli kolaylık sağlar.

IServiceCollection

IServiceCollection arayüzdür; ServiceCollection bunun uygulamasıdır. Birçok .NET kitaplığı, kayıt yapmak için IServiceCollection bekler; böylece somut sınıfa değil arayüze bağlı kalırsın.

Kayıt genelde arayüz→uygulama çiftiyle yapılır: services.AddTransient<ILogger, ConsoleLogger>(). Bu, ILogger istendiğinde ConsoleLogger örneği döndürülmesini sağlar. Uygulamayı değiştirmek istersen yalnızca kaydı değiştirirsin; tüketen kod aynı kalır.

Uygulama Servis kaydet ve çöz

Main içinde var services = new ServiceCollection(); ile kapsayıcı oluştur. services.AddTransient<ILogger, ConsoleLogger>(); ile kaydet. var provider = services.BuildServiceProvider(); ile sağlayıcı kur. var logger = provider.GetRequiredService<ILogger>(); ile logger al ve logger.Log("Merhaba"); ile yazdır.

Örnek çözümü göster
var services = new ServiceCollection(); services.AddTransient<ILogger, ConsoleLogger>(); var provider = services.BuildServiceProvider(); var logger = provider.GetRequiredService<ILogger>(); logger.Log("Merhaba");
Örnek çözüm:
using System;
using Microsoft.Extensions.DependencyInjection;

interface ILogger { void Log(string msg); }

class ConsoleLogger : ILogger
{
    public void Log(string msg) => Console.WriteLine(msg);
}

class Program
{
    static void Main()
    {
        var services = new ServiceCollection();
        services.AddTransient<ILogger, ConsoleLogger>();
        var provider = services.BuildServiceProvider();
        var logger = provider.GetRequiredService<ILogger>();
        logger.Log("Merhaba");
    }
}

Kendini test et

  1. Metodu davranışına eşle

    AddTransient
    Her seferinde yeni
    AddScoped
    Kapsam başına
    AddSingleton
    Tek örnek
    BuildServiceProvider
    Sağlayıcı kurar
  2. AddTransient kaydını tamamla

    services.____<ILogger, ConsoleLogger>();
    Cevabı göster
    services.AddTransient<ILogger, ConsoleLogger>();
  3. ServiceCollection'da servis nasıl kaydedilir?

    • AddTransient/AddScoped/AddSingleton ile
    • Add metodunu direkt çağırarak
    • Yalnızca new anahtar kelimesiyle
    • Configure metoduyla
    Cevabı göster

    AddTransient/AddScoped/AddSingleton ile — Doğru. Servisler AddTransient/AddScoped/AddSingleton ile kaydedilir.

İleri seviye bölümündeki tüm dersler