Interceptors ve Castle Windsor İle Kullanımları

Merhaba arkadaşlar,
Bu yazımda sizlerle Interceptors  nedir ne işe yarar ve Castle Windsor kütüphanesiyle birlikte  kullanımını, benim de öğrendiklerim kadarıyla paylaşmaya çalışacağım.

Öncelikle bu mimariye başlamadan önce az da olsa Aspect Oriented Programing kavramını bilmekte yarar var. Çünkü AOP kavramı  hakkında bilgi sahibi olmanın Interceptor ‘ları anlamada faydası olacaktır.

Aspect Oriented Programming

Aspect Oriented kavramı aslında temel  olarak birbiri ile çakışan ilgilerin (cross-cutting) birbirinden ayrılmasını amaçlar.  Bu ne demektir? Örneğin, geliştirdiğimiz projelerderde business katmanındaki  işlemler için öncesinde sonrasında veya o esnada bir takım başka işlemler gerçekleştiririz. İşte bu işlemlere birbiri ile çakışan ilgiler olmaktadırlar. Örneğin bir işleme baslamadan önce isteğin loglanması, işlem bittikten sonra işlem sonucunun loglanması, bu ana işlemlerin her birinde  hata yakalama mekaniznasının kurulması , isteği yapan kullanıcının yetkisinin olup olmamasının kontrolü vb.

Bu ve bunlar gibi işlemler aslında bizim asıl amacımız olan business metodlarından çok daha fazla olabilmektedirler. Eğer tüm bu işlemleri başka bir sistem bizim üzerimizden alırsa business katmanlarındaki kodlarımız çok daha yalınlaşıp daha az zaman maliyeti gerektirecektir.

İşte AOP (Aspect Oriented Programmig) ‘un ana amacı bu kesişmekte olan ilgileri ayırmaktır.

Peki bu çakışan ilgilerin ayrılma işini nasıl yapacağız? Bu aşamada interceptorlar yardımımıza koşuyor. Interceptorlar belirli metot çalışmalarında araya girererek (önce veya sonra olacak şekilde) ve diğer çakışan ilgilerin yerine getirilmelerini sağlamaktadır.

Interceptors

Şimdi sıra geldi bu interceptor yapılarını kurmaya .Net Framework içinde bu yapılar bulunmaktadır, ancak daha kolay kullanım ve hız açısından Castle Windsor  küütüphanesini kullanacağız. Bu yapımızı kullanırken bir önceki yazımızda kullandığımız proje yapısını kullanıyor olacağız. O yazıya göz atmak için: http://osmanaktemur.com/inversion-of-control-ioc-nedir-castle-windsor-ioc-container-kullanimi/

Interceptor Uygulanışı

Castle Windsor ile Interceptor uygulama işlemini yapabilmemiz için  Interceptor metodunu içerisinde bulunduran tipin IInterceptor interface’ini implemente etmesi gerekir. Şimdi mevcut uygulamamız için MyInterceptor adında bir sınıf oluşturalım ve IInterceptor interface’ini implemente edelim.

Aslında tüm interceptor yapısı bu kadar.  Bu metod içerisinde istediğimiz ilgili işlemleri gerçekleştirebiliriz. IInterceptor interface’i içerisinden gelen Intercept metodu  IInvocation tipinden bir parametre alıyor. Bu parametrede  ise çağrılan metot ile ilgili tüm bilgiler vardır. Bu nedenle metot çalıştırılmasından önce yazacağımız interceptor devreye gireceğinden dolayı çağrılan metodu çalıştırmak yada çalıştırmamak bizim elimizde. Bunun için de eğer istek yapılan metodu çağırmak istersek IInvocation tipi içerisinde bulunan Proceed metodunu çağırmamız gerekmekte.

Şimdi isterseniz bu interceptor metodumuzu doldurmaya başlayalım. Metodumuzu aşağıdaki şekilde değiştiriyoruz.

Şimdi sıra yazdığımız interceptor metodunu Castle Windsor tarafına register etme işlemine. IoC Container yazımızdan hatırlayacağımız gibi Castle Windsor için  IoCUtil isimli sınıf içerisinde hazırda bir fluent olarak IoC tanımlaması yapmıştık. Bizim buna ek olarak yapmamız gereken sadece interceptor tanımlamasını yapmak. Bunun içinde yapmamız gereken ilk şey Interceptor’ı container içerisine register etmek ve yaşam süresini belirlemek. Sonra da  tiplerimiz üzerinde araya girecek olan Interceptor’ı yine container üzerine bildirmek olacaktır.

Bu yüzden IoCUtil isimli sınıfımızdaki BootstrapContainer metodumuzu aşağıdaki gibi Interceptor eklemesi yapıyoruz.

Yukarıdaki registerda ise ilk olarak MyInterceptor tipinin yaşam süresini belirttik. Burada yaptığımız Transient tanımı bu tipin her defasında tekrar oluşturulacağını belirtir.

Şimdi projemizi çalıştırıp  ve Interceptor’ın çalışmasını gözlemleyelim. İsterseniz bu aşamada ilgili yerere breakpoint koyup metodların çalışmalarından önce MyInterceptor sınıfındaki Intercept metodunun araya girdiğini görebilirsiniz.  Çıktımız aşağıdaki gibi olacaktır.

Evet arkadaşlar bu yazımızda temel olarak AOP kavramında ve Interceptor  yapısına Castle Windsor kütüphanesi ile beraber göz attık.Umarım faydalı olmuştur.

Bir cevap bırakın
Son Yazılar