0

MyClass我为希望通过 ServiceManager 检索的别名定义了一个别名,请参见module.config.php下面的示例。MyClass当我在我的控制器中检索一个实例时,我$this->serviceLocator->get('MyClass')第一次得到一个新的实例,然后是同一个实例。我错过了配置中的某些内容还是应该提交错误?

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

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

2 回答 2

0

我不知道,DIServiceManager希望您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手册上的示例配置

希望这可以帮助 :)

斯托扬

于 2013-04-22T19:22:40.397 回答
0

由于我的编辑未被接受,我将自己回答这个问题。最后,我ServiceManager感谢 Stoyan Dimov,他把我推向了正确的方向。不幸的是,他的回答并不正确。我不得不使用invokables而不是alias. 下面是正确的例子:

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

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

当我使用alias而不是invokables我得到一个exception具有该名称的服务不可用时,这意味着它alias不起作用,必须有一个由、invokables或定义的现有服务。factoriesservicesabstract_factories

按照前面的示例,我可以使用:

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

通过调用$this->serviceLocator->get('SomethingDifferent')我会收到一个Some\Namespace\MyClass.

于 2013-04-24T06:34:11.283 回答