标签:san err 对象 des art 环境 依赖注入 参数 上下文
服务是提供了一些功能的类,比如发送邮件,写日志.
服务提供者中指明了这个提供者可以提供哪些服务(注册服务),以及服务注册后默认调用一些方法(boot).
可以,依靠Laravel的依赖注入,你可以方便的调用任何一个服务,而不用服务提供者.
a.利用服务提供者的boot方法,可以做一些全局性的设置,如在boot中对view的composer
b.服务提供者利用bind或singleton可以实现一个接口到实现类绑定,调用该服务对应的接口,会返回了一个具体的实现类.这不是更复杂了么?是的,是有点复杂,但好处是松耦合,更加灵活,调整服务也变的更加简单.
服务容器是一个用于管理类依赖和执行依赖注入的强大工具.简而言之就是,你将功能类(服务)作为参数传递到一个容器类中,以后直接调用容器类就可以.服务提供者的绑定就是向Laravel核心容器类,传递了一个服务类来做参数,核心容器类内部实现了绑定该服务作为容器类的一个属性.
是,所以你可以在服务提供者中延迟加载,只有在你需要的时候才加载这个服务.设置服务提供者的defer属性和provides方法.
可以,在服务提供者中绑定的时候实现依据上下文环境绑定.
如
$this->app->when(‘App\Handlers\Commands\CreateOrderHandler‘)
->needs(‘App\Contracts\EventPusher‘)
->give(‘App\Services\PubNubEventPusher‘);
可以,使用服务提供者的标签
可以.
a.使用$this->app->make(‘xxx‘)或$this->app[‘xxx‘],在控制器中使用帮助函数app()->make(‘XXX‘)
b.可以简单的通过在类的构造函数中对依赖进行类型提示来从容器中解析对象,包括控制器、事件监听器、队列任务、中间件等都是通过这种方式
public function __construct(UserRepository $users)
{
$this->users = $users;
}
可以,在服务提供者中使用$this->app->resolving
a.Laravel 的契约是指框架提供的一系列定义核心服务的接口,比如, Illuminate\Contracts\Queue\Queue 契约定义了队列任务需要的方法, Illuminate\Contracts\Mail\Mailer 契约定义了发送邮件所需要的方法.每一个契约都有框架提供的相应实现。比如,Laravel 提供了多个驱动的队列实现,邮件实现则由 SwiftMailer驱动。所有的 Laravel 契约都有其 GitHub 库,这为所有有效的契约提供了快速入门指南,同时也可以作为独立、解耦的包被包开发者使用。
b.Laravel 的门面为 Laravel 服务的使用提供了一个简便的方式——不再需要从服务容器中类型提示和解析契约.如Auth::user(),Auth::check();Cache::get()等
a.服务提供者在项目根目录下的Providers
b.可以使用命令创建一个服务提供者
php artisan make:provider TestProvider
c.每个服务提供者需要注册在在config/app.php的providers数组中
标签:san err 对象 des art 环境 依赖注入 参数 上下文
原文地址:http://www.cnblogs.com/itfenqing/p/6924560.html