如何在 Laravel Nova Action 中使用接口存储库?

How to use an Interface Repository in a Laravel Nova Action?

我正在使用 Laravel Repository Pattern 来管理我的资源,我想知道如何在 Nova Action 中使用界面?由于无法实例化接口,我想知道如何在我的操作中使用我的接口?

在我的 Controller 构造函数中,我创建了我的存储库,然后我可以在我的函数中使用它,但我不知道如何在 Laravel 动作中做同样的事情。

知道我该怎么做吗?

我的控制器中的示例

private $myRepository;

public function __construct(
    MyRepositoryInterface $myRepository,
)
{
    $this->myRepository = $myRepository;
}

然后在一个函数中我可以做类似

的事情
public function destroy($id)
{
    $this->myRepository->delete($id);

    return response()->json( array("message" => "success") );
}

现在在我的 Nova Action 中,这是我正在尝试做的事情

public function handle(ActionFields $fields, Collection $models)
{
    foreach ($models as $model)
    {
        $myRepository = new MyRepositoryInterface(); // This doesn't work obviously
        $myRepository->customManipulation($model->id);
        $this->markAsFinished($model);
    }
}

知道如何使用我的存储库吗?

谢谢!

你可以做 $myRepository = App::make(MyRepositoryInterface::class);,IoC 会解析它并实例化一个 class 实例。

我假设您已经将 class 绑定到接口:

App::bind('MyRepositoryInterface', 'MyRepository');