我为MyClass
定义了一个我希望通过ServiceManager可以检索的别名,请参阅下面的module.config.php
示例。当我通过MyClass
在我的控制器中检索$this->serviceLocator->get('MyClass')
的实例时,我第一次得到一个新的instane,然后是同一个实例。我是否会错过配置中的内容或者我应该提交错误?
module.config.php
return array(
'di' => array(
'instance' => array(
'alias' => array(
'MyClass' => 'Some\Namespace\MyClass',
),
'MyClass' => array(
'shared' => false,
),
),
),
);
答案 0 :(得分:0)
我不知道DI
,但ServiceManager
期望您在管理器的配置数组的根目录中指定shared
(false)。像这样:
'invokables' => array( // Note that you can use also 'factories', 'abstract_factories', etc.
'Some\Namespace\MyClass' => 'Some\Namespace\MyClass',
),
'alias' => array(
'MyClass' => 'Some\Namespace\MyClass',
),
'shared' => array(
'MyClass' => false,
),
上的ServiceManager
示例配置
希望这会有所帮助:)
斯托
答案 1 :(得分:0)
由于我的编辑未被接受,我将自己回答这个问题。最后,由于Stoyan Dimov将我推向正确的方向,我搬到了ServiceManager
。不幸的是他的答案不正确。我必须使用invokables
而不是alias
。这是正确的例子:
return array(
'invokables' => array(
'MyClass' => 'Some\Namespace\MyClass',
),
'shared' => array(
'MyClass' => false,
),
);
当我使用alias
代替invokables
时,我得到了exception
,没有可用的服务,这意味着alias
不起作用,必须有invokables
,factories
,services
或abstract_factories
定义的现有服务。
按照上一个例子,我可以使用:
...
'alias' => array(
'SomethingDifferent' => 'MyClass',
),
...
致电$this->serviceLocator->get('SomethingDifferent')
我会收到Some\Namespace\MyClass
的实例。