定義
IoC是對框架的一個特徵的描述。是指框架代替應用程式設計師成為主程式的角色,控制整個系統的資源和流程。
理解
IOC沒有說明具體是怎樣的實現的。它只是說明主程式的控制許可權,從應用程式設計師轉換成框架而已。
控制 : 對系統資源和流程的控制許可權。
反向 : 對系統資源和流程的控制, 從應用程式設計師轉換成框架了。
實現方式
- 依賴注入 Dependence Inversion - DI
- 服務定位器 Service Locator - SL
- 依賴查詢
DI
在依賴注入中,IOC容器生成依賴並且把依賴傳遞到資源中。
結構中包含的角色
- IocContainer (IOC容器)
- Resource (具體資源)
- ResourceDependent (資源依賴)
最小可表達程式碼
class ResourceDependent {}
class Resource
{
public function __construct(ResourceDependent $resourceDependent){}
}
$resource = new Resource(new ResourceDependent);
Service Locator
- 在服務定位中,資源呼叫服務定位器獲取依賴,資源的依賴轉移到服務定位器中。
- 該模式強調的是 服務或元件統一在服務定位器中 註冊,定位,排程,使用。
結構中包含的角色
- ServiceLocator (服務定位器)
- Resource (具體資源)
- ResourceDependent (資源依賴)
最小可表達程式碼
class ResourceDependent {}
class ServiceLocator
{
public static function getService(String $serviceKey)
{
return new new ResourceDependent();
}
}
class Resource
{
private $resourceDependent;
public function __construct()
{
$this->resourceDependent = ServiceLocator::getService('服務的key');
}
}
Service Locator 和 DI結合使用
YII2.0 中 Service Locator把 物件建立和獲取例項的部分 外包給了DI容器。
本作品採用《CC 協議》,轉載必須註明作者和本文連結