Inversion of Control là một nguyên lý thiết kế phần mềm trong đó quyền điều khiển việc tạo và quản lý các đối tượng được chuyển giao từ class sử dụng sang một thành phần bên ngoài (thường là một container hoặc framework).
Thay vì một class tự tạo ra các dependency của nó, IoC container sẽ đảm nhận việc này và "inject" các dependency vào class đó.
Dependency Injection là một kỹ thuật cụ thể để implement IoC. DI cho phép các dependency được "Inject" vào một class từ bên ngoài thay vì class đó phải tự tạo ra chúng.
Dependency được truyền vào thông qua constructor của class.
Dependency được truyền vào thông qua các method setter.
Dependency được truyền vào thông qua interface.