我正在使用Laravel 5.2。我尝试从IOCContainer中解决Laravel中的依赖关系,如下所示。(使用App::make
方法)
App/FooController.php:-
<?php
namespace App\Http\Controllers;
use App\Bind\FooInterface;
use Illuminate\Support\Facades\App;
class FooController extends Controller
{
public function outOfContainer(){
dd(App::make('\App\bind\FooInterface')); // Focus: program dies here!!
}
}
在AppServiceProvider中完成FooInterface的绑定,如下所示
App/Providers/AppServiceProvider.php:-
<?php
namespace App\Providers;
use App\Bind\Foo;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('\App\Bind\FooInterface', function() {
return new Foo();
});
}
}
Foo类的结构如下。
App/Bind/Foo.php:-
<?php
namespace App\Bind;
class Foo implements FooInterface {
}
FooInterface
接口的结构如下: -
<?php
namespace App\Bind;
interface FooInterface {
}
然后我按如下方式创建了一条路线。
Route::get('/outofcontainer', 'FooController@outOfContainer');
但是当我导航到这条路线时,它会抛出一个带有错误文本的异常:
BindingResolutionException in Container.php line 748:
Target [App\bind\FooInterface] is not instantiable.
这有什么问题? 如何在AppServiceProvider中使用App:make()?
答案 0 :(得分:0)
在您的服务提供商中,您将绑定字符串'\App\Bind\FooInterface'
。在您的控制器中,您尝试制作字符串'\App\bind\FooInterface'
。这些字符串不一样,因为它们有不同的情况(Bind
vs bind
)。由于字符串不相同,Laravel无法在容器中找到绑定。
更正make语句中的大小写,它应该有效:
dd(App::make('\App\Bind\FooInterface'));