在larave5中建立自身的服務提供者,執行時,報:Target [App\IServices\TestServiceInterface] is not instantiable.的錯誤。程式碼結構如下,請各位幫忙分析一下原因:
我自己在app目錄下建立了一個目錄取名:IServices,用來存放自己服務相關的介面。實作都放在Services目錄下。
然後服務提供者都放在Providers目錄中。
完成以上步驟後,在app.php中登記服務提供者。
接著在HomeController中透過建構器注入,依賴介面:
在進行執行的時候,報了不能實例化的錯誤。
我就不明白,為什麼不能實例化呢?這個接口我已經實現了呀。並且也註冊了?是哪一個關鍵環節錯了?還是漏掉了?希望有大神能指點一下,謝謝!
貼出來你的bug trace和service provider出來看看 否則再牛的大神也猜不出來你哪裡錯了。 直覺告訴我你應該是app.php裡面沒有加自己的provider
寫法是沒錯的,但是你得告訴 ioc 你綁定的這個介面的實作是什麼,l4 中是
bind
方法, l5還沒細看,應該也有這個方法吧。否則 laravel 就不知道該注入什麼,自然光一個介面是無法實例化的了。應該找個地方寫上類似
App::bind('TestServiceInterface', 'TestService')
我想弱弱的問一句
接口可以被實例化嗎?
我也不知道為什麼重新通過composer了一個項目,按照之前的寫了一次,就可以了。有可能是我之前的專案在學習過程中改動了什麼地方吧。沒有檢查出來具體錯在什麼位置。遺憾
wonder哥~,這個問題解決沒?我已經快崩潰了
經過自己搜尋答案,原來是composer在搞怪。看來得去了解coposer.json了