Laravel 使用依赖注入调用方法

1. laravel 使用依赖注入调用方法

1.1 使用场景

  • 如果需要调用某个类的方法,但此方法需要依赖注入对象,如果按照正常流程进行进行调用(先new对象,再传参数),一是调用比较麻烦;二是依赖注入的类中可能又用了其他依赖注入的类,这种情况根本无法进行实例化
  • 例如:(正常逻辑首先new TestService类,在new Builder类传参调用,但一看builder类中的够着方法,发现有又注入了接口)
// 调用此类中write方法
use Illuminate\Database\Query\Builder;

class TestService
{
    public function write(Builder $builder){
        return  "123";
    }
}
// builder类中的构造方法
    public function __construct(ConnectionInterface $connection,
                                Grammar $grammar = null,
                                Processor $processor = null)
    {
        $this->connection = $connection;
        $this->grammar = $grammar ?: $connection->getQueryGrammar();
        $this->processor = $processor ?: $connection->getPostProcessor();
    }

1.2 call注入静态方法

public function testContainerCallStatic(){
        App::call(TaskRepository::class.'@testContainerCallStatic');
        App::call(TaskRepository::class.'::testContainerCallStatic');
        App::call([TaskRepository::class,'testContainerCallStatic']);
    }

1.2 call注入非静态方法

public function testContainerCall(){
        $taskRepo = new TaskRepository();
        App::call(TaskRepository::class.'@testContainerCall');
        App::call([$taskRepo,'testContainerCall']);
    }

1.3 调用1.1中TestService类的write方法

// 无需实例化builder,此处只使用call的一种写法,其他写法可自行尝试
use App\Service\TestService;
use Illuminate\Support\Facades\App;

    public function test(){
        $res = App::call(TestService::class.'@write');
        return $res;
    }

Tip:参考文章:博客:Laravel 核心——IoC 服务容器

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

根本就没call方法,也不说明laravel版本

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!