Araçlar

PostSharp 2027.0'da aspect'ler servisleri constructor injection ile alabiliyor

PostSharp 2027.0, aspect'lerin dependency injection container'ından servis istemesine izin veriyor. Derleme sırasında bu servisler, geliştirilen sınıfın constructor parametrelerine eklenir; böylece global service locator kullanmaya gerek kalmaz. Eski kod kademeli olarak taşınabilir ve PostSharp Caching cache backend'ini container'dan alabilir.

Metalama / PostSharp Blog Gaël Fraiteur
Yayın tarihi
Okuma süresi
8 dk okuma
agent çalıştırması #14
agent çalıştırması #14
Orijinale git postsharp.net

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Servis istemek için IAdviceProvider.ProvideAdvices içinden ImportDependencyAdviceInstance döndürün.
  • Opsiyonel servis için IsRequired = false, ilk kullanımda çözülmesi için IsLazy = true kullanın.
  • Derleme constructor parametrelerini ekler; özgün imza protected internal bir forwarder olur.
  • new ile oluşturulan nesneler RunTimeServiceLocator'a düşer; bu servisleri başlangıçta kaydedin.
  • [CacheConfiguration] üzerinde UseDependencyInjection açarak ICachingService'i container'dan alın.
  • Özellik PostSharp 2027.0.6-preview sürümünden itibaren mevcut.

PostSharp aspect'lerini dependency injection ile birlikte kullanmak uzun süre zordu: derleme zamanında oluşturulup statik olarak saklandıkları için constructor tabanlı container'lar onlara servis veremiyordu. PostSharp 2027.0 bu boşluğu kapatıyor. Bir aspect, IAdviceProvider üzerinden ImportDependencyAdviceInstance döndürerek servis isteyebiliyor ve derleme, hedef sınıfın constructor'ına karşılık gelen bir parametre ekliyor. Servisler zorunlu, opsiyonel veya lazy olabilir.

Sınıf bağımlılıklarını her zamanki gibi tanımlar, servisleri ise container kaydeder. Hâlâ new ile nesne oluşturan kod bu parametreler için null alır ve süreç genelinde çalışan RunTimeServiceLocator'a düşer; böylece geçiş adım adım yapılabilir. PostSharp Caching aynı mekanizmayı UseDependencyInjection ile kullanır, her container kendi cache'ini sahiplenir. Statik metotlar constructor servisi alamaz; bunlar süreç genelindeki varsayılan servisi kullanır ve CAC011 uyarısı alır.

Gerçek dünyada kullanımı

  • Servis metotlarını denetleyen bir audit aspect'i, her container'a ait IAuditLog'a yazar; testler logları paylaşmaz.
  • Repository benzeri sınıflarda cache backend'i composition root'ta yapılandırılan bir caching aspect'i.
  • Bazı sınıfları container'dan alıp diğerlerinde hâlâ new kullanan, on yıllık bir kodun kademeli taşınması.

Neden önemli

Aspect'ler artık bağımlılıklarını global locator arkasına gizlemiyor; testler izole edilebiliyor ve başlangıç sırası kritik olmaktan çıkıyor. Eski kod, tüm aspect'leri yeniden yazmadan sınıf sınıf DI'a taşınabilir.

Bu özet, Metalama / PostSharp Blog üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü