Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 22873|Yanıt: 0

[Kaynak] .NET/C#, AOP'yu Autofac ve DynamicProxy üzerinden uygular

[Bağlantıyı kopyala]
Yayınlandı 4.11.2017 12:21:23 | | | |
AOP nedir? Baidu Ansiklopedisi'nden Alıntı: AOP, Aspect Oriented Programming'in kısaltmasıdır; yani: ön derleme yöntemleri ve çalışma zamanı dinamik ajanlar aracılığıyla program fonksiyonlarının birleşik bakımını sağlamak için yüz odaklı programlama teknolojisi. AOP'u uygulamanın iki ana yolu vardır: biri derleme sırasında statik implantasyon, avantajı yüksek verimlilik, dezavantajı ise esneklik eksikliği ve .net altındaki postsharp temsilcidir (bu ücretlidir). Diğer yöntem ise dinamik proxy'lerdir; bunlar birincinin tam tersi avantaj ve dezavantajlarına sahiptir; hedef tipi için dinamik olarak proxy oluşturur ve proxy çağrıları aracılığıyla onları yakalar. AOP'nin yapabileceği şey, yaygın kullanım senaryoları işlem işleme, loglama vb. Autofac'ın AOP'u nasıl uyguladığından bahsedelim, Autofac .net altında çok iyi bir IOC konteyneri ve çok iyi performans (.net altında en verimli konteyner), ayrıca AOP sadece bir kaplan. Autofac'ın AOP'si, Castle (aynı zamanda bir konteyner) projesinin Autofac.Extras.DynamicProxy adlı temel bölümü aracılığıyla uygulanıyor; adından da anlaşılacağı gibi, dinamik bir proxy olarak uygulanıyor.

Kullanımdan önce hazırlık:

Nuget paketini yükleyin: Autofac, Autofac.Extras.DynamicProxy, ve başarılı kurulumdan sonra üç referans eklenecektir


Şimdi resmen başladı!



Adım 1: Bir engelleyici oluşturun

Aşağıda, ele geçirilen yöntemin adını, parametreler listesini ve geri dönüş sonucunu gösteren basit bir engelleyici örneği yer almaktadır

Adım 2: Interceptor'u Autofac konteynerine kaydedin

Önleme aracı, Aufofac konteynerinde ya engelleyici tipiyle ya da isimle kaydedilmelidir; bu da önleme yöntemini farklı kılar (daha sonra tartışıldığı gibi).


İsim enjeksiyonu
Yapımcı. Register(c => new CallLogger(Console.Out)). <IInterceptor>Adlandırılan ("log-calls");

Tip enjeksiyonu
Yapımcı. Register(c => yeni CallLogger(Console.Out));


Adım 3: Engelleyiciyi etkinleştirin

Engelleyiciyi etkinleştirmenin iki ana yolu vardır: EnableInterfaceInterceptors(), EnableClassInterceptors().

EnableInterfaceInterceptors yöntemi dinamik olarak bir arayüz proxy oluşturur

EnableClassInterceptors yöntemi, hedef sınıfın bir alt sınıf proxy sınıfı oluşturur ve burada belirtilmelidir ki bu sadece sanal yöntemi kesip yöntemi geçersiz kılacaktır

Interceptor örnek kodunu etkinleştirin:


Adım 4: Kesmek istediğiniz türü belirtin

İki yol vardır:

İlk tür: Tipe bir özellik özelliği ekle




İkinci tür, kayıt tipi konteynere aktarıldığında engelleyiciyi dinamik olarak enjekte etmektir


Adım 5: Etkisini test et

1. Vekil müdahale



Circle sınıf kodu:



2. Arayüz proxy müdahalesi



IShape Arayüz Kodu:

Circle sınıf kodu:







Önceki:VS2010 C# Port Kapatma Aracı kaynak kodu
Önümüzdeki:JS-MD5 şifreleme fonksiyonu
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com