1

在代码库的一小部分中使用 DI 作为独立组件我想让一些服务在这部分之外可见,并且可以通过接口类名访问。

据我所知,我应该为此使用容器。因此,当代码的旧部分(不能使用 DI)想要使用服务时,该实现由这部分代码配置:它应该调用$container->get(MyInterface:class).

问题是我收到:

The "App\MyInterface" service or alias has been removed or inlined when the container was compiled. You should either make it public or stop using the container directly and use dependency injection instead.

我不能在代码的其他部分使用 DI。所以我想公开我的一些服务。这是我的代码:

服务.yaml:

# ...
# autowire & autoconfigure: true
# catalogs included

App\MyInterface: '@my.configured.implementation'

my.configured.implementation:
    class: App\MyInterfaceImplementation

生成器:

$containerBuilder = new ContainerBuilder();
$loader = new YamlFileLoader($containerBuilder, new FileLocator(__DIR__));
$loader->load('services.yaml');

//Make `MyInterface::class` public so
//$container->get(MyInterface::class) should work.
$containerBuilder->getDefinition(MyInterface::class)->setPublic(true);

$containerBuilder->compile(true);

在获得定义时,我收到:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "App\MyInterface"

我怎样才能使它起作用?或者也许有更好的方法通过这两个模块使用一项服务?

4

0 回答 0