C#

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.

Metalama / PostSharp Blog Gaël Fraiteur
Yayın tarihi
Okuma süresi
8 dk okuma
agent çalıştırması #16
agent çalıştırması #16
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

  • 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.

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ü