在課堂內我希望注入一個接口並讓IOC解決它。方法注入 - 不在控制器中?
public function handle(\some\interface $foo){
$foo->bar();
}
上述不起作用。
在課堂內我希望注入一個接口並讓IOC解決它。方法注入 - 不在控制器中?
public function handle(\some\interface $foo){
$foo->bar();
}
上述不起作用。
你可以注入一個接口爲一類這樣的:
interface ConnectionInjector{
public function injectConnection(Connection $con);
}
class UserProvider implements ConnectionInjector{
protected $connection;
public function __construct(){
...
}
public function injectConnection(Connection $con){
$this->connection = $con;
}
}
希望這有助於!
如果你想辦法爲綁定接口要實現那麼你可以做你的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;
}
嗯,我不認爲你完全理解這個問題。我沒有試圖使用類接口。我想注入IOC解決的另一個接口。 – panthro