我的类有一个依赖(Guzzle),所以构造函数看起来像这样:
public function __construct(Client $client)
{
$this->_client = $client;
}
但是,这个类的用户必须知道Guzzle并实例化这样的类:
$client = new \Guzzle\Http\Client();
$service = new Service($client);
我不希望最终用户关注这种依赖关系,也许将来甚至可以选择添加额外的HTTP客户端服务类。什么是“隐藏”这种依赖的最佳做法?
答案 0 :(得分:1)
DIC将负责创建和注入依赖项,用户只需获取服务实例,而不关心它是如何创建的。
然而,这很容易说,但你不能强迫用户使用DIC。所以另一种解决方案是:
示例:
class MyServiceFactory
{
public function create(Client $client = null)
{
$client = $client ?: new Client(...);
return new MyService($client);
}
}