【发布时间】:2018-07-24 07:10:48
【问题描述】:
我想了解在 laravel 中自动依赖注入是如何工作的。我正在使用这个库 https://github.com/yedincisenol/dynamic-links 。它有一个绑定到 IoC 容器的服务提供者类
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->singleton('DynamicLinks', function ($app) {
return new DynamicLinks($app['config']['dynamic-links']);
});
}
解析类给了我一个库类的实例,
$dynamicLinks = resolve('DynamicLinks');
根据文档,如果在控制器方法中提示类型,则该类会自动注入,
另外,重要的是,您可以简单地“输入提示” 类的构造函数中的依赖关系由 容器,包括控制器、事件监听器、队列作业、 中间件等等。在实践中,这就是大多数对象的方式 应该由容器来解决。
这是我的控制器方法:
public function getLink(Request $request, DynamicLinks $dynamicLinks) {
// other stuffs
}
但问题是,它没有在注入的实例中获取配置文件并从库中抛出ConfigException。
这是类的构造函数
public function __construct(array $config = null)
{
if ($config == null) {
$config = require_once 'config.php';
}
if ($config == null || !isset($config['api_key']) || strlen($config['api_key']) < 1) {
throw new ConfigException;
}
$this->config = $config;
$this->client = new Client([
'base_uri' => 'https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=' . $config['api_key']
]);
}
似乎该类在没有配置的情况下被实例化,而不是使用提供者注册的实例。
【问题讨论】:
-
或者配置返回
null...你的类引用DynamicLinks在你的控制器方法中指向什么? -
@lagbox,类引用是库中的
yedincisenol\DynamicLinks\DynamicLinks;类。这就是为什么$config是null。
标签: php laravel dependency-injection