laravel - 依赖注入和IOC容器(laravel - dependency injecti

2019-08-19 16:58发布

我试图总结依赖注入和IoC容器围绕我的头,我用我的UserController中作为一个例子。 我定义什么是由于UserController在其构造取决于然后我使用App ::绑定绑定这些对象是()。 如果我使用的输入::得到()正面/方法/事情我不能走,我只是注入它的Request对象的优势在哪里? 我应该使用下面的代码代替,现在的Request对象注入或doesInput ::得到()解析为相同的Request实例? 我想使用静态外立面但如果他们下定决心,未注射的对象。

$this->request->get('email');

依赖注入

<?php
App::bind('UserController', function() {
    $controller = new UserController(
        new Response,
        App::make('request'),
        App::make('view'),
        App::make('validator'),
        App::make('hash'),
        new User
    );
    return $controller;
});

UserController的

<?php
class UserController extends BaseController {

protected $response;
protected $request;
protected $validator;
protected $hasher;
protected $user;
protected $view;

public function __construct(
    Response $response,
    \Illuminate\Http\Request $request,
    \Illuminate\View\Environment $view,
    \Illuminate\Validation\Factory $validator,
    \Illuminate\Hashing\BcryptHasher $hasher,
    User $user
){
    $this->response = $response;
    $this->request = $request;
    $this->view = $view;
    $this->validator = $validator;
    $this->hasher = $hasher;
    $this->user = $user;
}

public function index()
{
    //should i use this?
    $email = Input::get('email');
    //or this?
    $email = $this->request->get('email');

    //should i use this?
    return $this->view->make('users.login');

    //or this?
    return View::make('users.login');
}

Answer 1:

如果你担心一个可测试性的东西,那么你真的应该只是注射的是没有被通过门面路由的情况下,作为外墙本身是可测试已经(这意味着你可以在L4嘲笑这些)。 你不应该需要注入响应,散列器,查看环境,要求等。通过它的外观,你只需要注入$user

对于一切我只是坚持使用静态门面。 退房的swapshouldReceive在基方法Facade类。 您可以轻松更换底层的实例用自己的嘲笑对象或只是开始嘲讽,例如, View::shouldReceive()

希望这可以帮助。



文章来源: laravel - dependency injection and the IoC Container