IoC Containers ve Castle Windsor ile IoC Container Kullanımı


Inversion of Control (IoC) bir yazılım tasarım prensibidir. Uygulama içerisindeki nesne yaratma sürecinin bir framework aracılığı ile yapılmasıdır. Bu framework request edilen nesneleri abstraction'lara bağlı olarak otomatik bir şekilde oluşturur ve bağımlılıkları inject eden bir yöntem kullanır. Bunlara da Container adı verilir. 

Çalışma prensibi ise kısaca; IoC soyut tiplerin hangi somut tipler tarafından register edileceği bilgisini saklar. Uygulama içinde container'dan abstract bir nesne talep ettiğimiz zaman bize register da tanımlı olan concrete type'ın bir instance'ını yaratıp bize verir.

IoC için kullanılabilecek çeşitli kütüphaneler mevcuttur. En popüler olanları;

  • Castle Windsor
  • Ninject
  • Structure Map
  • Autofac
  • Unity
şeklinde olduğunu söyleyebiliriz.

Kod tarafından Castle Windsor kullanarak bir uygulama üzerinden örnek bir uygulama yapmaya başlayabiliriz. Öncelikle Nuget üzerinden Castle Windsor'u uygulamamıza yüklememiz lazım. Daha önce Dependency Injection yazımızda kullandığımız örnek üzerinden devam edelim ve uygulamamıza bir adet IoCUtility adlı bir class ekleyelim. Bu class bizim IoC işlemlerimizden sorumlu olacaktır.




Burada en önemli metodumuz BootstrapContainer metodudur. Metodu incelediğimiz zaman tanımladığımız sınıflar için atama yaptığımız bir işlem göreceğiz. Kısaca açıklamak gerekirse; eğer senden IMailService arayüzünden bir sınıf istediğimde sen  bana GmailService sınıfını vereceksin. Bunun dışında başka bir sınıf istemiyorum. Eğer ileride bir ihtiyacım olursa bunun ayarını ileride ben yaparım.

Şu an Container'ımızı oluşturduk. Şimdi bunu Main içinde uygulamaya geçelim. 


Yorum satırında yazmış olduğumuz kodda sınıfı biz oluştururken bir alt satırdaki kodda bu işi IoC Container'a bıraktık. Artık resgister içinde belirlediğimiz ayarlara göre IoC bize o sınıfın bir instance'ını verecektir.



Yorumlar