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:
|