为什么?
make()
类上瘾,我想要自动构造函数依赖项处理(假设具体的,类型化的依赖项)。所以我写了一个辅助方法:
function container()
{
if(is_null(Container::getInstance())) {
Container::setInstance(new Container());
}
return Container::getInstance();
}
如果在Laravel中使用此库,我不想与任何现有的帮助器方法冲突。通过检查现有的静态实例,我认为这将在Laravel内部或外部很好地发挥。
这有效!我可以做container()->make(SomeClass::class)
,它会自动构建并注入构造函数依赖项。
晴。
如果该类具有Container本身的依赖性(如Pipeline那样),则barfs:
BindingResolutionException:目标[Illuminate \ Contracts \ Container \ Container]不可实例化
当然,好吧,管道需要合同,而且没有接线。所以让我们更新辅助方法来做到这一点:
function container()
{
if(is_null(Container::getInstance())) {
$container = new Container();
$container->bind('Illuminate\Contracts\Container\Container', $container);
Container::setInstance($container);
}
return Container::getInstance();
}
但现在我得到了:
isset中的非法偏移类型或空
堆栈跟踪显示了Container.php中的一堆行号。
任何想法如何在Laravel之外手动连接Container,这样我就可以bind()
的东西,并使用Container来构建类并处理依赖包括它自己?
答案 0 :(得分:3)
由于您要绑定到现有对象,请使用instance
方法:
$container->instance('Illuminate\Contracts\Container\Container', $container);