Laravel-目标[App\Interfaces\Auth\AuthInterface]在生成时不可实例化
在我的Laravel-8应用程序中,我试图将存储库绑定到一个接口 我有以下代码: App\Providers\RepositoryServiceProvider:Laravel-目标[App\Interfaces\Auth\AuthInterface]在生成时不可实例化,laravel,Laravel,在我的Laravel-8应用程序中,我试图将存储库绑定到一个接口 我有以下代码: App\Providers\RepositoryServiceProvider: class RepositoryServiceProvider extends ServiceProvider { public function register() { $this->app->bind( 'App\Interfaces\Auth\AuthInte
class RepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(
'App\Interfaces\Auth\AuthInterface',
'App\Repositories\Auth\AuthRepository'
);
}
}
配置\应用程序:
App\Providers\RepositoryServiceProvider::class,
然后界面如下所示:
namespace App\Interfaces\Auth;
use Illuminate\Http\Request;
use App\Http\Requests;
interface AuthInterface
{
public function register(Request $request);
}
存储库实现:
namespace App\Repositories\Auth;
use App\Interfaces\Auth\AuthInterface;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use App\Traits\ApiResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class AuthRepository implements AuthInterface
{
use ApiResponse;
public function register(DriverRequest $request)
{
DB::beginTransaction();
try {
$newUser = User::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => preg_replace('/\s+/', '', strtolower($request->email)),
'password' => bcrypt($request->password)
]);
DB::commit();
return $this->success('Signup Successfully Done, please check your email to activate account', $newUser);
} catch(\Exception $e) {
DB::rollback();
Log::error($e);
return $this->error($e->getMessage(), $e->getCode());
}
}
}
控制器
use App\Interfaces\Auth\AuthInterface;
class AuthController extends Controller
{
protected $authInterface;
public function __construct(AuthInterface $auth)
{
$this->authInterface = $auth;
}
public function register(Request $request)
{
return $this->authInterface->register($request);
}
}
当我执行php artisan route:list时,出现以下错误:
Illuminate\Contracts\Container\BindingResolutionException
Target [App\Interfaces\Auth\AuthInterface] is not instantiable while building [App\Http\Controllers\Api\V1\Auth\AuthController].
at C:\xampp\htdocs\myapp\vendor\laravel\framework\src\Illuminate\Container\Container.php:1049
1045▕ } else {
1046▕ $message = "Target [$concrete] is not instantiable.";
1047▕ }
1048▕
➜ 1049▕ throw new BindingResolutionException($message);
1050▕ }
1051▕
1052▕ /**
1053▕ * Throw an exception for an unresolvable primitive.
1 C:\xampp\htdocs\myapp\vendor\laravel\framework\src\Illuminate\Container\Container.php:842
Illuminate\Container\Container::notInstantiable("App\Interfaces\Auth\AuthInterface")
2 C:\xampp\htdocs\myapp\vendor\laravel\framework\src\Illuminate\Container\Container.php:714
Illuminate\Container\Container::build("App\Interfaces\Auth\AuthInterface")
我如何解决它
谢谢也许会显示存储库实现?@Brianthonpson-我在代码更新中添加了存储库实现。我猜出于某种原因,它没有检测到您的服务提供商。它没有意识到接口实际上应该是与实现相反的依赖关系,所以它试图实例化接口。我会尝试向您的服务提供商添加日志,以确保它实际正在执行,并仔细检查所有名称空间的不一致性。