-- Design Patterns, Open Source

Ninject ile Dependency Injection Uygulaması

Merhabalar,

Uzunca bir süredir makale ve video gibi eğitsel içerik üretmediğimin farkındayım. Bu kötü gidişe bir dur demek için de hoşuma giden bir Open Source framework’ü anlatmaya karar verdim. 🙂

Kişisel ya da kurumsal projelerde kullandığımız alt yapılar belirli tasarım şablon ve kalıpları üzerine kurulmakla birlikte tasarım deseni(Design Pattern nedir) konusuna bu makalede değinmeyeceğim. Makalede sadece Dependency Injection tasarım desenini için geliştirilen Ninject’i inceleyecek mini bir uygulama yapacağız. Başka makalelerde de Ninject konusunda farklı yeteneklerden bahsedeceğim.

Öncelikle bu makaleyi ve Ninject’i daha iyi anlayabilmeniz için araştırmanızı istediğim 3 başlık aşağıdaki gibidir;

  • Dependency Injection
  • Dependency Inversion
  • Inversion of Control

Bu başlıklar, birbiriyle ilişkili ve hatta aynı anlama gelen kısımları da olan genel bir tanımlar kümesi diyebiliriz.

Ninject

Artık Dependency Injection için geliştirilen ve işimizi kolaylaştıran Ninject’e giriş yapabiliriz.

Sol tarafta gördüğünüz ninja arkadaş Ninject’in logosu olmakla birlikte bu aracın sitesine şu adresten ulaşabilirsiniz.

 

Visual Studio 2015 ile geliştireceğim uygulama için çalışmaya başlıyoruz.
Visual Studio ile NinjectSolutions adında yeni bir Blank Solution açıyoruz.

Bu solution içerisine Encryption adında yeni bir konsol uygulaması oluşturuyoruz.

1

Ninject kütüphanesini projeye dahil etmek için ister Nuget Packager Manager Console ya da Nuget Package Manager’ı kullanabilirsiniz.

Konsol üzerinden(bakınız) “Install-Package Ninject -Version 3.2.2

ya da Nuget Package Manager ile
3Ninject başarıyla kurulduysa References kısmında kütüphaneyi görüyor olmalısınız.

Projeye bir interface tipinde IEncrypter dosyası ekliyoruz.

4

 

 

 

 

 

 

IEncrypter arayüzünden kalıtım(miras) alan COEncrypter adında bir sınıf(class) dosyası ekliyoruz.

5

 

 

 

 

 

 

 

IEncrypter arayüzünden kalıtım(miras) alan BOEncrypter adında bir sınıf(class) dosyası ekliyoruz.

6

Projeye Modules adında bir klasör ve bu klasör altına da EncrypterModule adında bir sınıf oluşturuyoruz.

Ninject moduller, DI(Dependency Injection) mimarisi için hazırlanan arayüz(interface) nesnelerine çağrı geldiğinde bu işlemin hangi sınıf ile yapılması gerektiğini belirttiğimiz mapping işlemini sağlamaktadır.

EncrypterModule sınıfı NinjectModule sınıfından miras alarak kalıtımla gelen Load metodunu eziyor ve bu metod çağrıldığında(Bu işlemi Ninject çekirdeği yönetiyor) IX adındaki interface X adındaki sınıfı map etmiş gibi bir mapping işlemini algılayıp ilgili X sınıfını çağırıyor.
7

 

 

 

 

 

 

 

 

 

 

Mimari temel olarak hazır. Son olarak uygulamaya geçerek Program.cs içerisinde bu geliştirdiğimiz mimariyi kullanıyoruz.

8

Sonuç;

9

 

 

 

Projenin son görünümü şu şekildedir.

10

 

 

 

 

 

 

 

 

 

Projenin EncrypterModule içerisindeki açıklama satırı olan kısmı açıp diğerini açıklama satırı yaparak tekrar çalıştırın ve aradaki farkı inceleyin.
Kaynak : Mastering Ninject for Dependency Injection

 

Umarım faydalı olmuştur.
Cihan Özhan

Yorumla

Yorum