Ninject ile ASP .NET MVC’de Dependency Injection

Selamlar,
Bu makalede Ninject ile ASP.NET MVC’de Dependency Injection’ın nasıl uygulayabiliriz onun üzerine konuşuyor olacağız.

Dependency İnversion


Solid yazılım geliştirme prensiplerinden birisi olan ve “D” harfini temsil eden bu prensip bağımlılıkların tersine çevrilmesini anlamına gelmektedir.Biraz daha açıklayacak olursak nesneler ile çalışıyorsak mutlak nesne üretimi de yapıyoruz.Katmanlı mimari bir projede çalışırken katmanlar arası geçişlerde new anahtar kelimesi ile nesne üretimi yaptığımız anda artık o sınıfa bağımlı hale geliriz. Bunun yerine bu prensip bağımlılıkların dışarıdan enjekte edilmesini ve bu şekilde bağımlılıkların tersine çevrilmesini söyler.

Dependency İnjection


Dependency İnjection ise bu prensibin uygulanış yöntemidir. Bu yöntem ile bağımlılık oluşturabilecek nesnelerin dışarıdan enjekte edilmesi ve bağımlılıkların “loose coupled” yani gevşek bağlı bir şekilde yapılmasını sağlayan tasarım desenidir.

IoC Container


Inversion of Control (IoC)Nesnelerin uygulama boyunca ki yaşam döngüsünden sorumludur.Uygulama içerisinde
kullanılan nesnelerin instance’larının yönetimini sağlar.Nesne üretim işleminin Singleton olarak merkezi bir noktadan yönetimini sağlamaktadır.

  • Castle Windsor
  • Ninject
  • StructureMap
  • Autofac
  • Unity

Katmanlı mimaride Ninject ile ASP.NET MVC’de Dependency Injection nasıl uygularız ona bakalım.

Nuget Package Manager Ninject Kurulumu


asp.net-mvc-dependency-injection-545×91


IRepository



RepositoryBase



IStudentDal & StudentDal


IStudentService & StudentManager

NinjectBindModule.cs

Kodumuza baktığımızda oluşturduğumuz sınıfımızı NinjectModule’den inherit ediyoruz. Daha sonra NinjectModule içerindeki Load metodunu
override edip soyut ve somut sınıflarımızı beliyoruz. Bu module ControllerFactory içersine register edeceğiz.

ControllerFactory.cs

Asp.Net Mvc yaşam döngüsüne baktığımızda bir controller’a request geldiği zaman DefaulControllerFactory devreye girerek o controller’dan bir nesne üretip içersindeki actionları invoke eder. Bunu yaparken parametresiz constructor’a sahip controller’lar üzerinde gerçekleştirir.Lakin bizim constructor’ımız parametre almakta ve şuan için DefaulControllerFactory bizim işimizi görmemektedir. Bunun için kendi ControllerFactory’mizi yazıyoruz.

Global.asax

Son olarak Global.asax içinde Application_Start() metodunun içinde Controller’mızı Asp.Net Mvc yaşam döngüsüne ekliyoruz.

Katmanlı bir mimaride Ninject ile ASP .NET MVC’de Dependency Injection yöntemini kullanarak katmanlar arası bağımlılıkları en aza indirdik bir başka yazıda görüşmek üzere.
Hoşçakalın…

BUNLAR DA HOŞUNUZA GİDEBİLİR...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir