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