我正在尝试在PHP中构建一个基本的REST客户端,以此来熟悉依赖注入容器的概念。最终,我想做一些事情:
$client = new RestClient();
$client->getService('user', array('id, optional fields...'));
但我也希望能够指定哪个对象应该处理请求(例如,如果我想使用fopen而不是curl)。
根据我到目前为止所读到的,实现这一目标的正确方法是:
$request = new ServiceDefinition(
'Curl',
array('...')
);
$user = new ServiceDefinition('User',
array(new ServiceReference('request'))
);
$container = new ServiceContainer(array(
'request' => $request,
'user' => $user,
));
我的问题是:是否有更简单的方法来构建用户对象和请求对象之间的依赖关系? (RestClient()上的基本setter注入,也许?)
提前致谢。
答案 0 :(得分:0)
根据您对依赖注入的熟悉程度,使用DI容器可能会在深层跳入。简而言之,用简单的二次注射替代容器当然是可能的:
interface HttpAdapterInterface {}
class CurlAdapter implements HttpAdapterInterface {}
class SocketAdapter implements HttpAdapterInterface {}
class RestClient {
public function setHttpAdapter(HttpAdapterInterface $adapter) {
// ...
}
}
Fabien Potencier有a good series on DI,其中第二部分涵盖了DI容器(以及何时使用它们)。