Dependency Injection Nedir ?

Tuğçenur Erdoğan
2 min readAug 30, 2021

Dependency injection, yazılım mühendisliğinde kullanılan, bir nesnenin, bağımlı olduğu diğer nesneleri(dependencies) aldığı bir tekniktir. Alıcı yani herhangi bir bağımlılığı olan nesneye client(istemci), inject edilen nesneye ise service(servis) adı verilir. Servisi client’a ileten kod ise injector dur. Bu tekniğin en önemli olayı client a hangi servisi kullanacağını belirtme işini injector ün yapmasıdır. Son olarak injection servisi kullanan client’a, servisin yani dependency(bağımlılığı) sinin iletilemesi anlamına gelir.

Servis, client ın bir state’ i durumuna getirilir. Bir servisin client a iletilmesi pattern in temel gereksinimidir. Bu olay client ın servisi bulması ya da oluşturmasına izin verme ihtiyacını ortadan kaldırır.

Dependency injection daki asıl amaç kod okunabilirliğini ve kodun yeniden kullanımını artırmaktır. Aslında dependency injection, kontrolü tersine çevirme tekniğinden de geniş olan tekniğin bir formudur. Örneğin bazı servisleri call etmek isteyen bir client, bu servisleri nasıl kuracağını bilmek zorunda değildir. Bu zorunluluk yerine client injector e yetki verir. Injector ise mevcutta bulunan veya injector tarafından oluşturulabilecek servisleri client’a iletir. Client daha sonra servisleri kullanır. Ve işin büyülü yanı client injector ün(harici kod) farkında değildir.

Tüm bunlar client ın, injector ü, servislerin nasıl oluşturulacağını ve hangi servisleri kullandığını bilmesine gerek olmadığı anlamına gelir. Client’ın yalnızca servislerin interfacelerini(arayüz) bilmesi yeterlidir, çünkü bunlar client’ın servisleri nasıl kullanacağını veya kullanabileceğini tanımlar. Bu, “use” sorumluluğunu “construction” sorumluluğundan ayırır.

Dependency injection, client ların bağımlılıkları bulmak için kullandıkları sistem hakkında bilgi sahibi olmalarını sağlayan “service locator pattern” (hizmet bulucu pattern) ile de doğrudan çelişir.

Aslında baktığımızda doğrudan class içinde nesneler oluşturmak, class ı belirli uygulamalara bağlar. Bu, özellikle temel alınan nesnelerin değiştirilmesinin source code un yeniden derlenmesini gerektirebileceği durumlarda, işleri zorlaştırır.

Dependency Injection, client ların bağımlılıklarının oluşturulmasını, client ın bağımlılığı tersine çevirme ve tek sorumluluk ilkelerini destekleyen davranışından ayırır. Temel olarak dependecy injection, parametrelerin bir metoda geçirilmesine dayanır.

Dependency Injection kısaca şu 3 sorunun cevabıdır :

-Bir class, bağımlı olduğu objectlerin nasıl yaratıldığından independent olabilir?

-Object oluşturulma şekli, ayrı konfigürasyon dosyalarında nasıl belirtilebilir?

-Bir application farklı konfigürasyonları nasıl destekleyebilir?

--

--