2016-12-08 67 views

回答

0

你可以注入一個接口爲一類這樣的:

interface ConnectionInjector{ 
    public function injectConnection(Connection $con); 
} 

class UserProvider implements ConnectionInjector{ 
    protected $connection; 

    public function __construct(){ 
     ... 
    } 

    public function injectConnection(Connection $con){ 
     $this->connection = $con; 
    } 
} 

希望這有助於!

+0

嗯,我不認爲你完全理解這個問題。我沒有試圖使用類接口。我想注入IOC解決的另一個接口。 – panthro

-1

如果你想辦法爲綁定接口要實現那麼你可以做你的App\Providers\AppServiceProvider類爲register方法:

$this->app->bind('some\interface', 'some/class_implementation'); 

Docs

一個非常強大的功能服務容器的功能是將接口綁定到給定實現的能力。例如,我們假設我們有一個EventPusher接口和一個RedisEventPusher實現。一旦我們已經編寫了RedisEventPusher實現這個接口,我們可以將其與服務容器,像這樣註冊:

$this->app->bind(
    'App\Contracts\EventPusher', 
    'App\Services\RedisEventPusher' 
); 

這條語句告訴它應該注入 RedisEventPusher容器當一個類需要一個執行EventPusher。 現在我們可以的類型提示的EventPusher接口在構造函數中,或 其中依賴性由服務 容器注入任何其他位置:

use App\Contracts\EventPusher; 

/** 
* Create a new class instance. 
* 
* @param EventPusher $pusher 
* @return void 
*/ 
public function __construct(EventPusher $pusher) 
{ 
    $this->pusher = $pusher; 
} 
+0

這不起作用,只適用於控制器。 – panthro

+0

在你的問題中,你已經要求「在課堂內」,我認爲控制器也是課程。如果您有任何具體的使用案例,請在您的問題中提供,以便我們能夠爲您提供幫助。 –

+0

好了,我的用例是任何類,但是一個控制器。謝謝你的幫助。 – panthro