작성
·
171
0
안녕하세요, 강의중에 bind, singleton 부분에서 singleton 적용시에도 bind 처럼 동작하여 문의드립니다.
비슷한 증상의 질문 봤어서 해당 질문 답변에 기재된 gmail 주소로 소스코드 압축하여 보내드렸습니다.
확인해주실 수 있으실까요?ㅠㅠ
app.php
'providers' => ServiceProvider::defaultProviders()->merge([
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\AProvider::class,
])->toArray(),
web.php
Route::get('/one', function () {
for ($i=0; $i < 3; $i++)
{
echo app(Acontroller::class)->multiple(2);
echo "<br />";
}
return "------------";
});
Acontroller.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Acontroller extends Controller
{
// 클래스 안에서만 쓸 수 있는 내부 변수
protected $result;
protected $basecontroller;
// 내부 함수의 기본값을 설정하는 __contruct (생성자)
public function __construct(BaseController $basecontroller){
$this->basecontroller = $basecontroller;
}
public function multiple($num){
$this->result += $this->basecontroller->plus($num) * 10;
return $this->result;
}
}
BaseController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BaseController extends Controller
{
protected $result;
public function __construct(){
$this->result = 0;
}
public function plus($num){
$this->result = $num + 5;
return $this->result;
}
}
AProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Http\Controller\Acontroller;
use App\Http\Controller\BaseController;
class AProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
$this->app->singleton(Acontroller::class, function($app) {
return new Acontroller($app->make(Basecontroller::class));
});
}
/**
* Bootstrap services.
*/
public function boot(): void
{
}
}