在代码库的一小部分中将DI用作独立组件,我希望使某些服务在此部分之外可见并可以通过接口类名称进行访问。
据我所知,我应该为此使用一个容器。
因此,当旧代码部分(不能使用DI)要使用服务时,该实现由该部分代码配置:应调用let matrixo = require('./modules/random.js');
var matrix = matrixo(40, 40);
。
问题是我收到:
$container->get(MyInterface:class)
我不能在代码的其他部分使用DI。因此,我想公开我的一些服务。这是我的代码:
services.yaml:
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.
Builder:
# ...
# 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);
如何使它起作用?或者也许有更好的方法来通过这两个模块使用一项服务?