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]; }