2013-04-22 98 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

相關問題