0

DI の共有オプションを無効にすることはできますか? 次のように動作することを示唆するパッチを見つけました。

return(array(
'di' => array(
    'definition' => array(
        'class' => array(
            'SomeService' => array(
            ),
        )
    ),
    'instance' => array(
        'SomeService' => array(
            'shared' => false
        ),
    )
)));

しかし残念ながら、使用すると常に同じインスタンスが得られます$serviceManager->get('SomeService');

何か案は?

4

2 に答える 2

0

ServiceLocator は DI 構成をチェックしないため、ZF2 (2.1.5) の問題のようです。手っ取り早い修正方法は、 を$this->getServiceLocator()->setShared('SomeService', false);呼び出す前に使用すること$serviceManager->get('SomeService');です。

于 2013-05-02T08:00:38.567 に答える
0

Service Locator パターンは、定義上、毎回同じサービス インスタンスを返します。

ZF2 DI は Service Locator パターンです。ただし、個別のインスタンスを取得する 1 つの方法は、エイリアスを使用することです。

'instance' => array(
    'alias' => array(
        'queue1' => 'Zend_Queue',
        'queue2' => 'Zend_Queue',
    ),
)

この例は ZF2 pre-beta4 プロジェクトからのものですが、現在の ZF2 DI では問題なく動作するはずです。現在、あなたが求めていることを行うためのより良い方法があるかもしれません (私はしばらく DI を使用していません) が、これはうまく機能します。


編集

この行によると、コードをさらに調べると、あなたがしたことはうまくいくはずです。'shared'またはキーワードのいずれかが、'share'キーワードと同じ深さに配置された場合'parameter'(あなたが行ったように) ->setShared()、指定された値が渡されて、そのサービスに対して呼び出される必要があります。

残念ながら、私はもう DI を使用していないので、DI に関してこれ以上の手助けはできません。

于 2013-05-02T14:15:26.053 に答える