使用IOC contatiner laravel

时间:2017-12-11 07:51:07

标签: php laravel ioc-container

我试图通过依赖注入来获得我班级的实例。 此类具有在app.php

中注册的自己的服务提供者
 class Something
 {
      private $variable;

      public function __construct(string $variable)
      {
          $this->variable = $variable; 
      }
 }

这是服务提供商

class SomethingServiceProvider extends ServiceProvider
{

    public function boot()
    {

    }


    public function register()
    {
        $this->app->singleton('Something', function () {
            return new Something( 'test');
        });
    }
}

当我尝试在控制器中使用这个类实例时......

class TestController extends AppBaseController
{
    public function __construct(Something $something)
    {
        $this->something = $something;
    }
...

我收到了错误:

  

"无法解析的依赖项解析[参数#0 [string $ variable]]   在课堂上的东西   Container-> unresolvablePrimitive(object(ReflectionParameter))in   Container.php(第848行)"

2 个答案:

答案 0 :(得分:1)

我猜YourServiceProvider::__construct接受非类型$app实例。这意味着Laravel无法自动解决它。尝试输入它; public function __construct(Application $app)使用正确的使用声明。

更多:https://laravel.com/docs/5.3/container#automatic-injection

答案 1 :(得分:0)

当您注册要注入的内容时,您需要使用完全限定的类名:

public function register()
{
    $this->app->singleton(Something::class, function () {
        return new Something( 'test');
    });
}

否则Laravel将尝试自动注入某些内容,这意味着它将首先尝试注入Something的依赖项,然后确定这是一个字符串并失败。