Metalama 2027.0 ile metot çağrılarını build sırasında yönlendirme
Metalama 2027.0, build sırasında seçilen metot çağrılarını yeniden yazan çağrı noktası interceptor'ları ekliyor. Böylece NuGet paketindeki ya da .NET kütüphanelerindeki bir metot, kaynak kodu değiştirilmeden sarmalanabilir. Yazı, T# şablonuyla yeniden deneme örneğini, elle yazılmış bir denetim yönlendirmesini ve kapsam kurallarını anlatıyor.
Kilit noktalar
- Interceptor'lar build sırasında çağrı noktalarını yeniden yazar; çağrılan metot bir NuGet paketinde ya da .NET kütüphanelerinde olabilir.
- T# şablonundaki meta.Proceed() her interceptor imzası için bir metot üretir; async ve generic metotlar da desteklenir.
- Elle yazılan interceptor'lar düz static metotlardır, birim testle sınanabilir; özyinelemeyi önlemek için [ExcludeInterceptors] ekleyin.
- Kapsam kayıt yerine göre belirlenir: aspect hedef tipi, namespace fabric'i namespace'i, proje fabric'i ise tüm projeyi ya da sorguyu kapsar.
- WithArgs ile yeniden deneme sayısı gibi sabit ya da derleme zamanı değerleri interceptor'a geçirilebilir.
- Paket Metalama.Extensions.Interceptors, 2027.0.4-preview sürümünden itibaren kullanılabilir; önizleme olduğu için üretimde kullanılmamalı.
Metalama 2027.0, build sırasında seçilen metot çağrılarını bir interceptor'a yönlendiren çağrı noktası interceptor'ları ekliyor. Metodu değiştiren override aspect'lerden farklı olarak interceptor çağıran tarafta çalışır; bu sayede çağrılan metot .NET kütüphanelerinden ya da bir NuGet paketinden gelebilir. Interceptor'lar ya düz bir static C# metodu ya da T# şablonundan imzaya göre üretilen metotlardır. Kapsamı kaydedildiği yer belirler: bir aspect, namespace veya proje fabric'i.
Yazıdaki yeniden deneme örneğinde bir satıcı istemcisinin Get ile başlayan metotları, TimeoutException oluştuğunda en fazla üç kez çağrılıyor; idempotent olmayan çağrılar ise olduğu gibi bırakılıyor. Metalama.Extensions.Interceptors paketi 2027.0.4-preview ile geliyor; bu bir önizleme sürümüdür ve üretim ortamında desteklenmez.
Gerçek dünyada kullanımı
- Bir satıcı SDK istemcisinin geçici zaman aşımı hatalarını, çağıran kodu değiştirmeden tüm servis katmanında yeniden deneme.
- Bir projedeki dosya silme ya da dış API çağrılarını, çağıran metot adı ve satır bilgisiyle denetim kaydına yazma.
- Eski koda test dikişi eklemek: testlerde Thread.Sleep veya dosya sistemi çağrılarını yönlendirerek sahte davranış verme.
Neden önemli
Kendi kodunuzda olmayan kütüphane çağrılarına yeniden deneme veya izleme gibi davranışları, çağıran kodu değiştirmeden ekleyebilirsiniz. Özellik önizleme aşamasında olduğundan şimdilik deneysel kullanım için uygun.
Benzer haberler
- Bobcat ile çalıştırılabilir spesifikasyonlar nasıl yazılırJeremy D. Miller (The Shade Tree Developer)5 gün önce
- Bobcat 1.0 yayında: testlerden okunabilir C# spesifikasyonlarıJeremy D. Miller (The Shade Tree Developer)6 gün önce
- C# 14 extension member'ları: derleyicinin uyarmadığı gölgeleme hatasıDEV Community: #csharp1 gün önce