jsz*_*ody 5 php laravel laravel-5
为什么?
make()
类是令人上瘾的,我想要自动构造函数依赖处理(假设具体的、类型提示的依赖)。所以我写了一个辅助方法:
function container()
{
if(is_null(Container::getInstance())) {
Container::setInstance(new Container());
}
return Container::getInstance();
}
Run Code Online (Sandbox Code Playgroud)
如果在 Laravel 中使用了这个库,我不想与任何现有的辅助方法发生冲突。通过检查现有的静态实例,我认为这在 Laravel 内部或外部都可以很好地发挥作用。
这有效!我可以做到container()->make(SomeClass::class)
,它会自动构建和注入构造函数依赖项。
大多。
如果该类对 Container 本身有依赖性(就像 Pipeline 那样),那么它会发出:
BindingResolutionException:目标 [Illuminate\Contracts\Container\Container] 不可实例化
当然,好的,Pipeline 需要一份未连接的合同。所以让我们更新辅助方法来做到这一点:
function container()
{
if(is_null(Container::getInstance())) {
$container = new Container();
$container->bind('Illuminate\Contracts\Container\Container', $container);
Container::setInstance($container);
}
return Container::getInstance();
}
Run Code Online (Sandbox Code Playgroud)
但现在我得到:
isset 或 empty 中的非法偏移类型
堆栈跟踪显示来自 Container.php 的一堆行号。
知道我如何在 Laravel 之外手动连接 Container,以便我可以然后bind()
使用 Container 构建类并处理包括自身在内的依赖项吗?
归档时间: |
|
查看次数: |
652 次 |
最近记录: |