Внутри класса я хочу ввести интерфейс и разрешить его 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;
}
}
Надеется, что это помогает!
Если вы хотите способ для переплета Интерфейсов реализаций, то вы можете сделать это в register
методы вашего App\Providers\AppServiceProvider
класса как:
$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;
}
Это не работает, работает только в контроллерах. – panthro
В вашем вопросе вы попросили «Внутри класса», и я думаю, что контроллеры также являются классами. Если у вас есть какие-либо конкретные варианты использования, предоставьте в своем вопросе, чтобы мы могли вам помочь. –
Итак, мой вариант использования - это любой класс, но контроллер. Спасибо за вашу помощь. – panthro
Хм, я не думаю, что вы в полной мере понять вопрос. Я не пытаюсь использовать интерфейс классов. Я хочу ввести другой интерфейс, который разрешает МОК. – panthro