2013-04-22 64 views
0

我为MyClass定义了一个别名,我想通过ServiceManager可以检索它,参见下面的module.config.php示例。当我通过$this->serviceLocator->get('MyClass')在我的控制器中检索MyClass的实例时,我第一次得到一个新的instane,然后是同一个实例。我错过了我的配置中的某些东西,还是应该提交一个错误?ServiceManager返回相同的实例,同时共享= false

module.config.php 
return array(
    'di' => array(
     'instance' => array(
      'alias' => array(
       'MyClass' => 'Some\Namespace\MyClass', 
      ), 

      'MyClass' => array(
       'shared' => false, 
      ),     
     ), 
    ), 
); 

回答

0

由于我的编辑不被接受,我会回答这个问题我。最后,我感谢Stoyan Dimov把我推向了正确的方向,转移到了ServiceManager。不幸的是他的回答不正确。我不得不使用invokables而不是alias。下面是正确的例子:当我使用alias代替invokables我得到了一个exception与该名称的服务可以是可用的,这意味着alias不起作用,必须有一个现有的

return array(
    'invokables' => array(
     'MyClass' => 'Some\Namespace\MyClass', 
    ), 

    'shared' => array(
     'MyClass' => false, 
    ), 
); 

invokables,factories,servicesabstract_factories定义的服务。

继先前的例子,我可以使用:

... 
'alias' => array(
    'SomethingDifferent' => 'MyClass', 
), 
... 

本着以$this->serviceLocator->get('SomethingDifferent')一个电话我会收到的Some\Namespace\MyClass一个实例。

+0

您的编辑被拒绝了,因为您不应该修改其他人的答案中的代码,除非修改格式等。如您现在所做的那样发布新答案是您最好的选择。 – Ren 2013-04-24 08:10:34

+0

啊,好吧知道。 – 2013-04-24 08:54:52

0

我不知道该DIServiceManager期待您的指定shared在配置阵列管理器的根目录(假)。事情是这样的:

'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示例配置

+0

如果没有其他好的答案可用我会考虑重构使用ServiceManager – 2013-04-22 19:40:54

+0

我会这样做:) – 2013-04-22 19:51:41

+1

我编辑了你的答案,因为它不工作,如果它通过我会接受它。 – 2013-04-23 06:09:45

相关问题