• 1401/08/05

جلسه 102 اموزش جامع لاراول عدم dependency injection در کلاس متناظر :

سلام استاد عزیز 

ما در بخش 102 اموزش لاراول که به بحث service provider و service container میپردازیم و یک مثال از سوختگیری خودرو برامون زدید یک کلاس fuelconsumption ساختیم و ارگومان ورودی متد calc کنترلر رو از نوع اون کلاس در نظر گرفتیم که مجبور شدیم تزریق وابستگی رو از طریق متد register سرویس پرووایدری که خودمون ساختیم انجام بدیم سپس یک ارگومان دیگه از نوع fueltype درنظر گرفتیم ولی در test2serviceprovider نیومدیم تزریق وابستگی انجام بدیم fueltype رو.علتش رو میخام بدونم. سوالم اینه که چرا وقتی fueltype رو تزریق وابستگی نکردیم لاراول بهش خطا نمیگیره . شاید جوابش اینه که چون fueltype وابسته هست به fuelconsumption ولی وقتی متد ارگومان رو میگییره هنوز نمیدونه که وابسته هست به ارگومان های قبلی یا بعدی یا نه. پس اصولا باید خطا بگیره ولی نمیگیره علتش چیه؟

CarController

<?php

namespace App\Http\Controllers;

use App\Additions\FuelType;
use App\Service\FuelConsumption;
use Illuminate\Http\Request;

class CarController extends Controller
{
    public function calc(FuelConsumption $fuelConsumption, FuelType $fuelType)
    {
        $fuelType=$fuelType->premium();
        dd($fuelConsumption->refueling(50));
    }
}

Test2ServiceProvider

class Test2ServiceProvider extends ServiceProvider
{
	public function register()
    	{
        	$this->app->bind(FuelConsumption::class,function(){
            	return new FuelConsumption('BMW');
        	});
    	}
}

FuelConsumption

class FuelConsumption
{
    private $model;

    private $extra;

    public function __construct($model)
    {
        $this->model=$model;
        $this->extra=0;
    }

    public function refueling($liter)
    {
        return [
            'distance' => $liter * 10+$this->extra,
            'model'=>$this->model,
            'extra'=>$this->extra,
        ];
    }

    public function premiumGasoline($extra)
    {
        $this->extra=$extra;
    }
}

FuelType

class FuelType
{
    private $fuelConsumption;
    public function __construct(FuelConsumption $fuelConsumption)
    {
        $this->fuelConsumption=$fuelConsumption;
    }

    public function premium()
    {
        $this->fuelConsumption->premiumGasoline(50);
    }
}
  • 1401/08/11
  • ساعت 00:04

با سلام خدمت شما

 

دقیقا وقتی شما شی رو میسازید به اون متغییر دسترسی دارید و دیگه نیازی نیست جداگانه تزریق کنید


logo-enamadlogo-samandehi