2014-02-12 38 views
0

從我的理解來看,Laravel除了提供商列表app/app.php之外,還生成服務清單這是一種代理。它負責僅爲給定請求加載必要的提供者。 例如如果我們不使用查看服務提供商(即使它已註冊),Laravel將不會加載它。Laravel服務清單

對嗎?

回答

2

是和不是。據我所知,Laravel所做的是檢查config/app.phpproviders密鑰的內容。對於其中的每一個,它實例化服務提供者類。然後檢查deferred屬性是否設置爲true。

如果不是,則以正常方式註冊並引導該類。

如果deferred設置爲true,則該類將被保留,直到需要爲止。檢查provides陣列的內容以查看此類中註冊了哪些IoC密鑰,然後只要其中一個需要註冊,服務提供商就會像其他任何註冊和引導一樣。

存儲目錄中的服務清單只是緩存此服務提供商檢查的輸出,因此它不必每個請求都這樣做(即,因此它不必實例化並檢查deferredprovides - 無論如何,延遲類仍然需要實例化,註冊和啓動)。

雖然我不確定在什麼情況下這個緩存「無效」。推測當providers配置密鑰的實際內容發生變化時,但也許它也可以在不實例化它們的情況下檢查SP。

對於非延期服務提供商 - 如果說沒有使用給定的IoC服務,那麼它就不會被實例化。但據我所知,這與服務清單不同。

+1

alexrussell - 謝謝。我只是因爲你很接近而投你的答案,你做了一個艱難的工作,試圖向我解釋這一點。讓我教你一些東西:) - 我只是讀了一段代碼。每個提供者都有一個註冊事件來監聽它是否被調用。所以推斷意味着提供者正在監聽事件。 – carousel