Lifetime: Singleton
Singleton lifetime ile tek örnek hizmetleri öğrenirsin.
Singleton lifetime
AddSingleton<T>() kaydı, uygulam boyunca tek bir örnek üretir. Aynı servisi birden çok kez çözdüğünde her seferinde aynı örnek gelir. Bu, paylaşılan durum tutan servisler için uygundur.
Singleton örnekler, kapsayıcı ömrü boyunca yaşar. Bu yüzden eşzamanlı erişime karşı güvenli olmalıdır. Yapılandırma, önbellek ve genel durum servisleri genellikle singleton kayıt edilir.
Thread safety
Singleton örnekler eşzamanlı erişime karşı güvenli olmalıdır. Kapsayıcı örneği tembel olarak bir kez üretir; aynı örneğe eşzamanlı erişen iş parçacıkları yarış durumuna düşebilir. Bu yüzden durum değişiklikleri lock veya eşzamanlı koleksiyonlarla korunur.
Yalnızca okunan yapılandırma servisleri için ek senkronizasyona gerek olmayabilir. Ancak sayacını artıran bir servis gibi durum değiştiren her Singleton, kilitleme gerektirir.
Uygulama Singleton: aynı örneği doğrula
Main içinde var services = new ServiceCollection(); ile kapsayıcı oluştur. services.AddSingleton<Counter>(); ile Counter'ı singleton kaydet. var provider = services.BuildServiceProvider(); ile sağlayıcı kur. var c1 = provider.GetRequiredService<Counter>(); ve var c2 = provider.GetRequiredService<Counter>(); ile iki kez çöz. c1.Count = 5; yapıp Console.WriteLine(c2.Count); ile yazdır.
Örnek çözümü göster
var services = new ServiceCollection(); services.AddSingleton<Counter>(); var provider = services.BuildServiceProvider(); var c1 = provider.GetRequiredService<Counter>(); var c2 = provider.GetRequiredService<Counter>(); c1.Count = 5; Console.WriteLine(c2.Count);
Örnek çözüm:
using System;
using Microsoft.Extensions.DependencyInjection;
class Counter
{
public int Count { get; set; }
}
class Program
{
static void Main()
{
var services = new ServiceCollection();
services.AddSingleton<Counter>();
var provider = services.BuildServiceProvider();
var c1 = provider.GetRequiredService<Counter>();
var c2 = provider.GetRequiredService<Counter>();
c1.Count = 5;
Console.WriteLine(c2.Count);
}
}
Kendini test et
-
AddSingleton ne zaman kullanılır?
- Her istekte yeni örnek gerektiğinde
- Her kapsam için ayrı örnek gerektiğinde
- Uygulama boyunca tek örnek paylaşıldığında
- Yalnızca hata ayıklama için
Cevabı göster
Uygulama boyunca tek örnek paylaşıldığında — Doğru. AddSingleton uygulama boyunca tek örnek paylaşmak için kullanılır.
-
Singleton kaydını tamamla
services.Add____<Counter, Counter>();Cevabı göster
services.AddSingleton<Counter, Counter>(); -
Lifetime'ı davranışına eşle
- Singleton
- Tek örnek
- Scoped
- Kapsam başına
- Transient
- Her seferinde yeni
- AddSingleton
- Kayıt metodu