我在父類別中註入一個物件,然後我想根據不同的子類別注入這個物件的不同實作.
因為父類別就要用這個物件,所以我不能在子類別中在註入,但是我需要不同的實作.
我控制注入的程式碼:
這樣寫不行,因為物件在父類別中就注入了,父類中註入的地方:
我在父類別中註入一個物件,然後我想根據不同的子類別注入這個物件的不同實作.
因為父類別就要用這個物件,所以我不能在子類別中在註入,但是我需要不同的實作.
我控制注入的程式碼:
這樣寫不行,因為物件在父類別中就注入了,父類中註入的地方:
方法1:不要在父類別的 action 方法中直接注入實例,父類別從別的方法取得相關實例,子類別重寫這個方法並傳回自己注入的實例。例如:
父類:
<code class="php">public function update() { $this->validate($this->getRequest(), ...); } protected function getRequest() { return app(Request::class); }</code>
子類:
<code class="php">protected function getRequest() { return app(RoleRequest::class); }</code>
方法2:使用 trait 。
方法3:在 __construct 中註入。類似方法1,父類別的 __construct 不依賴任何參數,子類別的 __construct 隨意依賴。
為什麼要設計成這個樣子?