2

従来、サービスコンテナは次のように使用していました。

$container->get('my_service');

ただし、特定のクラスの定義が1つしかない場合は、このサービスをクラス名で取得したいと思います。

$container->xxx('My\Application\Service');

これはサービスコンテナで可能ですか?

4

2 に答える 2

4

いいえ、それは不可能です。理由は次のとおりです。

  • クラスは複数回出現する可能性があります(多くの場合、出現します)[1]
  • DICを使用する主な理由は、具象実装をその使用法から切り離すためです。したがって、具象クラスのインスタンスが必要な場合は、DICはまったく必要ありません。

[1]この1つのクラスが一度だけ現れると言うことは、DIC自体にエッジケースを実装するための良い議論ではありません。

于 2012-07-13T11:20:25.750 に答える
1

Symfony 3.3以降、次のことが可能です。

たとえば、次のようなUserManagerがある場合:

services:
# ...
# traditional service definition
app.manager.user:
    class: AppBundle\EventListener\UserManager
    tags:  ['kernel.event_subscriber']

次に、次の方法で取得できます。

// before Symfony 3.3
$this->get('app.manager.user')->save($user);

// Symfony 3.3+
$this->get(UserManager::class)->save($user);

ソース

于 2020-02-10T23:19:05.553 に答える