DI Container

6/24/2021 OOPDI

# DI Container

# Description

DI containers are often software libraries that provides Dependency Injection functionality and allows automating many of the tasks involved in Object Composition, Interception, and Lifetime Management. DI Containers are also known as Inversion of Control (IoC) Containers.

  • Nơi quản lí và thực hiện dependency injection.

# Example

Mình đã build 1 application sử dụng DI container để quản lí các dependency .

Như example trước

$fooController = new FooController(new FooRepository(new FooService()));
1
  • AbstractContainer là DI container nơi register và resolve các dependency của application,
  • Không cần khởi tạo các dependency của FooController vì đã register các dependency ở AbstractContainer
  • AbstractContainer sử dụng Reflection để tìm các dependency của FooController và tự động inject chúng.

Application.php

protected array $dependencies = [
	FooServiceInterface::class => FooService::class,
	FooRepositoryInterface::class => FooRepository::class,
];
1
2
3
4

Trong Laravel, nếu dependency là 1 class thì không cần khai báo các dependency đó, vì Service Container của Laravel đã dùng Reflection và đệ quy để tự động tìm các dependency và inject chúng.

example: BarController


Github: https://github.com/ninhnguyen22/nin (opens new window)