Inversion of Control (IoC) Nedir? ve Castle Windsor IoC Container Kullanımı

Merhaba arkadaşlar,
Bu yazımda sizlerle  Inversion of Control nedir ne işe yarar ve Castle Windsor kütüphanesiyle birlikte  kullanımını, benim de bildiklerim kadarıyla anlatmaya çalışacağım.

Öncelikle IoC’un amacına değinmekte yarar var. IoC’un temel amacı uygulamalardaki akışların  çalışma zamanlarında  değişen parametrelere göre  değişmesini  sağlar ve de  uygulama içindeki bağımlılıkların minimuma indirgemeyi amaçlar. Bu bağlamıyla Dependeny Injection’a oldukça benzemektedirler. Fakat DI’ daki gibi her bir yaratılması istedigimiz nesneyle ilgili yardımcı metodları biz yazmayız. Bunun yerine IoC Containers adını verdiğimiz yardımcı kütüphaneler aracılığıyla yaratma işlemi gerçekleştirilir. Yani aslında IoC  Dependency Injectionun bir üst kabuğudur gibi düşünebiliriz. Bu Container kütüphaneleri ise büyük projelerde yükü bizim üzerimizden almaktadır.  Bu containerların temel kullanım biçimleriyse daha önceden bizim yaptığımız tanımlamaya göre ilgili tipin oluşturularak bize verilmesini amaçlarlar.

İnternette pek çok container kütüphanesi bulunmaktadır. Biz bunların içinden Castle Windsor‘u inceleyeceğiz. Bu kütüphanenin kurulumunu anlatma ihtiyacı duymuyorum. NuGet Package Manager’dan basitçe aratıp kurabilirsiniz.

Basit olarak örnek senaryomuza başlayabiliriz artık. Öncelikle aşağıdaki gibi 2 adet farazi interfacemizi oluşturuyoruz.

Temel olarak dosyayı bir sunucuya yüklemek üzere ve bu işlemleri loglama için bu interfacelerimiz var. Fakat dosyalar ihtiyaca göre farklı servislere upload edilebilir olmalı (gdrive , amazon , one drive gibi) ve ya loglar farklı ortamlarda tutulabilmelidir (text dosyası, veritabanı v.b.)

Ve de bu interfaceleri implement eden metodlarımız ise aşağıdaki gibidir.

Bu değişken ihtiyaçlara çözüm üretebilmek amacıyla IoC Container ile istenen tiplerin üretilmesini sağlayacağız.

Castle Windsor’un yapısı gereği 2 şekilde konfigürasyon yapabilmemize olanak sağlamaktadır. Bunlardan birincisi kod ile (fluent arayüz) tanımlamalarımız yapmak diğer bir şekli ise xml formatında config dosyası kullanmak. Biz fluent arayüz yardımıyla kod tarafında konfigüre edeceğiz. (Dilerseniz xml ile konfigürasyonun nasıl yapıldığına basit bir arama sonucu ulaşabilirsiniz )

Castle Windsor’ın  IoC Container yapısını konfigüre etmek ve  için tüm IoC Container işlemlerini yönetmek için bir basit bir sınıf yazacağız. Bu sınıf temel olarak içerisinde IoC Container’ı yaratacak ve daha sonra da bizim parametre olarak vereceğimiz interface’i implemente eden ve konfigürasyon sırasında tanımladığımız  tipi veriyor olacak.

Bu konfigürasyonu yapabilmemiz için projemize bir adet IoCUtil isimli  aşağıdaki gibi sınıf ekliyoruz.  Bu sınıf içerisinde bizim ne tür bir interfaceye karşılık hangi türde bir nesne verilmesi gerektiğini inejct eden basit bir  BootstapContaienr adında metod bulunmaktadır

Ve bu kadar 🙂 geriye sadece bu işleri yapacak bir processor sınıfı ile metodlarımızı çalıştırmak kalıyor.

Ve Process isimli metodumuzu çalıstırdıgımız zaman ise çıktımız aşağıdaki gibi olmaktadır.

capture

 

 

Gördüğünüz gibi IoCUtil sınıfı içerisindeki  oluşturduğumuz tanımlamalarımıza uygun çıktımızı elde ettik. İstediğimiz gibi tanımlamalarımızı değiştirerek projemizin akışındaki değişiklikleri görmemiz mümkün olacaktır.

 

 

Evet arkadaşlar bu yazımızda temel olarak IoC Container yapısını ve Castle Windsor kütüphanesi ile beraber  inceledik. Umarım az çok fikir sahibi olmuş ve faydalanmışsınızdır.

Yorum ( 1 )
  1. Interceptors ve Castle Windsor İle Kullanımları - Osman Aktemur
    8 Aralık 2016 at 16:01
    Cevapla

    […] Previous articleInversion of Control (IoC) Nedir? ve Castle Windsor IoC Container Kullanımı Bir cevap bırakın […]

Bir cevap bırakın
Son Yazılar