Cả hai mô hình có vẻ như là một thực hiện của nguyên tắc đảo ngược kiểm soát. Đó là, một đối tượng không nên biết cách xây dựng các phụ thuộc của nó.
Dependency Injection (DI) dường như sử dụng hàm tạo hoặc setter để "tiêm" các phụ thuộc của nó.
Ví dụ về việc sử dụng Con Contortor tiêm:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
Bộ định vị dịch vụ dường như sử dụng một "thùng chứa", kết nối các phụ thuộc của nó và cung cấp cho thanh đó.
Ví dụ về việc sử dụng Trình định vị dịch vụ:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
Bởi vì các phụ thuộc của chúng ta chỉ là các đối tượng, các phụ thuộc này có các phụ thuộc, thậm chí còn có nhiều phụ thuộc hơn, v.v. Do đó, Inversion of Control Container (hoặc DI Container) đã ra đời. Ví dụ: Castle Windsor, Ninject, Bản đồ cấu trúc, Mùa xuân, v.v.)
Nhưng Container IOC / DI trông giống hệt Bộ định vị dịch vụ. Có phải gọi nó là DI Container là một tên xấu? Có phải IOC / DI Container chỉ là một loại Định vị dịch vụ khác không? Là sắc thái trong thực tế là chúng ta sử dụng DI Container hầu hết khi chúng ta có nhiều Phụ thuộc?