Laravel 为什么存储库接口绑定到服务容器
我们需要在laravel应用程序中使用存储库。我们需要创建两个重要的东西,一个是存储库接口,另一个是存储库类 我的疑问是,为什么存储库接口和存储库类向服务提供商注册 我从服务提供商处删除了存储库接口和类 显示以下错误 “目标[App\Repository\UserInterface]在生成时不可实例化”Laravel 为什么存储库接口绑定到服务容器,laravel,repository,Laravel,Repository,我们需要在laravel应用程序中使用存储库。我们需要创建两个重要的东西,一个是存储库接口,另一个是存储库类 我的疑问是,为什么存储库接口和存储库类向服务提供商注册 我从服务提供商处删除了存储库接口和类 显示以下错误 “目标[App\Repository\UserInterface]在生成时不可实例化” 接口类只是方法的定义(没有方法体),因此不可实例化。这意味着您不能执行新建App\Repository\UserInterface() 在代码中的某个地方有一个方法(或者可能是构造函数?),它接
接口
类只是方法的定义(没有方法体),因此不可实例化。这意味着您不能执行新建App\Repository\UserInterface()
在代码中的某个地方有一个方法(或者可能是构造函数?),它接受UserInterface
依赖项,比如
public function myMethod(UserInterface $repository) {
...
}
// or
public function __construct(UserInterface $repository) {
...
}
如果删除绑定,Laravel将尝试实例化一个用户界面
,这将导致出现错误。
使用接口时,您必须始终使用具体的类bind()
它们
我有一个问题,为什么要从ServiceProvider中删除绑定?你好,莱昂纳多,谢谢你的回答。你问了一个问题“为什么要从ServiceProvider中删除绑定?”因为我们为什么要向ServiceProvider注册UserInterface(比如$this->app->bind('app\Repository\UserInterface',app\Repository\user\UserRepository');)我们直接将接口注入控制器,例如,假设我们需要用户模型方法,我们不在服务提供者中注册用户模型,而是直接将用户模型注入控制器并访问它们。那么为什么存储库要注册到服务提供者中呢?您不能直接注入接口。Laravel的服务容器必须知道如何解析该接口,这就是为什么您需要服务提供者中的绑定。
public function myMethod(UserInterface $repository) {
...
}
// or
public function __construct(UserInterface $repository) {
...
}