C#
ServiceCollection
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
-
Metodu davranışına eşle
- AddTransient
- Her seferinde yeni
- AddScoped
- Kapsam başına
- AddSingleton
- Tek örnek
- BuildServiceProvider
- Sağlayıcı kurar
-
AddTransient kaydını tamamla
services.____<ILogger, ConsoleLogger>();
Cevabı göster
services.AddTransient<ILogger, ConsoleLogger>();
-
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.
Sıradaki ders: Lifetime: Singleton