Php laravel中的依赖项注入问题

Php laravel中的依赖项注入问题,php,laravel,mailgun,Php,Laravel,Mailgun,我刚刚了解了laravel的服务容器和依赖项注入,为了尝试这一点,我创建了一个MailgunServiceProvider来实例化mailgun客户端,我还拥有一个名为SendMail的特性,它充当mailgun的包装器: 但是$mailgun变量返回null,我得到以下消息: message Call to a member function messages() on null exception Symfony\Component\Debug\Exception\FatalThrowa

我刚刚了解了laravel的服务容器和依赖项注入,为了尝试这一点,我创建了一个MailgunServiceProvider来实例化mailgun客户端,我还拥有一个名为SendMail的特性,它充当mailgun的包装器:

但是$mailgun变量返回null,我得到以下消息:

message Call to a member function messages() on null
exception   Symfony\Component\Debug\Exception\FatalThrowableError
file    C:\xampp\htdocs\dogmedia.com\app\Traits\SendMail.php
line    24
MailgunServiceProvider

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Mailgun\HttpClientConfigurator;
use Mailgun\Mailgun;



class MailgunServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(Mailgun::class, function()
        {
            return Mailgun::create(config('mail.mailgun.secret'), 'https://api.eu.mailgun.net');
        });
    }
}

类定义中定义的方法将优先于trait方法。因此,如果您的类定义了构造函数,则不会应用trait的构造函数方法

基类的继承成员被Trait插入的成员覆盖。优先顺序是当前类的成员覆盖Trait方法,而Trait方法反过来覆盖继承的方法

将使用类中定义的构造函数,而不是trait中具有相同名称的方法

如果您愿意,可以让
sendMail
方法从容器中获取所需的Mailgun类实例,从而避免完全处理构造函数:

$mailgun = app(\Mailgun\Mailgun::class);

类定义中定义的方法将优先于trait方法。因此,如果您的类定义了构造函数,则不会应用trait的构造函数方法

基类的继承成员被Trait插入的成员覆盖。优先顺序是当前类的成员覆盖Trait方法,而Trait方法反过来覆盖继承的方法

将使用类中定义的构造函数,而不是trait中具有相同名称的方法

如果您愿意,可以让
sendMail
方法从容器中获取所需的Mailgun类实例,从而避免完全处理构造函数:

$mailgun = app(\Mailgun\Mailgun::class);

什么类在使用这个特性?调用这个特性的代码在哪里?@lagbox id做了,刚刚选中,它是空的,刚刚删除了它,现在它工作了,任何人都可以解释这个吗?也许我应该用一个静态方法或其他什么把trait转换成cals…在那个场景中,类的构造函数定义优先于trait。。。请包括正在使用该trait的类什么类正在使用该trait?调用该trait的代码在哪里?@lagbox id做了,刚刚选中,它是空的tho,刚刚删除了它,现在它工作了,任何人都可以解释吗?也许我应该用一个静态方法或其他什么把trait转换成cals…在那个场景中,类的构造函数定义优先于trait。。。请包括使用该特性的类
class RandomClass
{
    use SendMail;

    public function __construct()
    {
    }
}
$mailgun = app(\Mailgun\Mailgun::class);