doushenyi9104 2017-10-13 12:41
浏览 39

Laravel 5.5依赖注入与构造方法

I have created a service in app/services/KDataService.php that looks like this:

class KDataService
{
    /** @var  string */
    private $license;

    /** @var  string */
    private $owner;

    /** @var string  */
    private $accessToken;

    public function __construct($owner, $license)
    {
        $this->owner = $owner;
        $this->license = $license;

        ...

    }

       ...

}

In one of my controller I try to inject this service with the dependency injection pattern but I get the following error:

Unresolvable dependency resolving [Parameter #0 [ $owner ]] in class App\Services\KDataService

My controller:

use App\Services\KDataService;

class DamagePointController extends Controller
{
    /** @var  KDataService $kDataService */
    private $kDataService;

    /**
     * Instantiate a new controller instance.
     *
     * @param KDataService $kDataService
     */
    public function __construct(KDataService $kDataService)
    {
        $this->kDataService = $kDataService;
    }  

    ...

}

Anyone knows how I can pass my $owner and $license?

  • 写回答

1条回答 默认 最新

  • duan36000 2017-10-13 13:14
    关注

    The problem is that your service has arguments but you don't specify them. There are several ways to do this.

    Using service provider:

    namespace App\Providers;
    
    use Riak\Connection;
    use Illuminate\Support\ServiceProvider;
    
    class kDataServiceServiceProvider extends ServiceProvider
    {
        /**
         * Register bindings in the container.
         *
         * @return void
         */
        public function register()
        {
            $this->app->bind(KDataService::class, function ($app) {
                return new KDataService(getOwner(), getLicense());
            });
        }
    }
    

    bind could be change to other methods. See Service Container docs.

    Using app to make instanse:

    /* Controller __construct */
    $this->kDataService = \App::make(KDataService::class, [getOwner(), getLicense()]);
    

    Simply create class instance

    /* Controller __construct */
    $this->kDataService = new KDataService(getOwner(), getLicense());
    

    Note: getOwner and getLicense change to your logic. Usually you can retrieve it within controller or from $app.

    Generally what you need to resolve the issue is to read about service container and service providers in docs.

    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀