IoC 是将内部设计的类交给系统去控制,可是有些类在初始化的时候,须要制定特定的参数,或者当你须要将实现类绑定到某个接口,这时候就必须对这些依赖进行配置,系统才能正确解析并引用。php
而 register 就是这样一个地方,你能够在 register 配置类的依赖,绑定实现类到接口,设置类的别名等等。nginx
而 boot 方法在 register 方法以后调用,这就意味着,你无须担忧在注入某个实例的时候,他尚未被绑定或实例化。ide
例如你创建了 SegmentFault 和 SegmentFaultApi 两个类,前者依赖与后者,可是在 register 中你不肯定那个类先被实例化了,那么你能够在 boot 中再对后者进行引用,由于此时两个类都已经进行正确的配置。函数
providers 方法用于延迟加载的 ServiceProvider,好比但愿在引用的时候再让系统去解析那个类,那么能够设置 $defer 变量为 true 来延迟启动,节省开销:ui
protected $defer = true;
当设置了延迟启动,须要重写 providers 函数。当 Laravel 遇到延迟加载的类,只要在每一个 ServiceProvider 中的 providers 函数中搜索制定的引用关键字,即可以调用正确 register 函数的解析该类:spa
public function providers() { return [SegmentFault::class]; }