我如何进行类型提示'自动注射'定制类laravel

时间:2018-04-24 09:54:00

标签: laravel dependency-injection type-hinting

以下是EmailNotifier类

class EmailNotifier 
{
    public function notify()
    {
        echo 'Sending payment notification via email' ;
    }
}

以下是我的AppServiceProvider

 class AppServiceProvider extends ServiceProvider
    {

        public function boot()
        {

        }

        public function register()
        {
           $this->app->make(App\EmailNotifier::class); // resolve the EmailNotifier Class
        }

    }

以下是结算类

class Billing
{

     protected $notifier;


     public function __construct(EmailNotifier  $notifier)
     {
         $this->notifier = $notifier;
     }

     public function pay()
     {
        // Process the bill payment
         $this->notifier->notify();
     }

}

在我的控制器中我做了

  $data = new Billing(1); 

正如您所看到的,我已经在AppServiceProvider类中解析了EmailNotifier类,但是当我像上面的代码那样调用它时,它会抛出一个错误,表示它必须是EmailNotifier的实例'

根据laravel文档,它表示:

  

你可以"输入提示"类的构造函数中的依赖项   由容器解决(对于automatic injection

如何在laravel中实现类型提示的自动注入?

1 个答案:

答案 0 :(得分:2)

使用$data = resolve(Billing::class);代替$data = new Billing(1);,您可以从服务提供商的注册方法中删除$this->app->make(App\EmailNotifier::class); // resolve the EmailNotifier Class