Kedua pola tersebut tampak seperti implementasi prinsip inversi kontrol. Artinya, suatu objek seharusnya tidak tahu bagaimana membangun ketergantungannya.
Dependency Injection (DI) tampaknya menggunakan konstruktor atau setter untuk "menyuntikkan" dependensinya.
Contoh menggunakan Injeksi Konstruktor:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
Service Locator tampaknya menggunakan "wadah", yang memasang dependensinya dan memberikan bilah foo itu.
Contoh menggunakan Pencari Layanan:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
Karena dependensi kita hanyalah objek itu sendiri, dependensi ini memiliki dependensi, yang bahkan memiliki lebih banyak dependensi, dan seterusnya dan seterusnya. Dengan demikian, Pembalikan Kontainer Kontrol (atau Kontainer DI) lahir. Contoh: Kastil Windsor, Ninject, Peta Struktur, Musim Semi, dll.)
Tapi Kontainer IOC / DI terlihat persis seperti Service Locator. Apakah menyebutnya Wadah DI adalah nama yang buruk? Apakah Kontainer IOC / DI hanyalah tipe lain dari Service Locator? Apakah nuansa pada kenyataan bahwa kita menggunakan Kontainer DI sebagian besar ketika kita memiliki banyak Ketergantungan?