В моем Laravel проекте мне кажется, что то, чего я могу достичь через поставщика услуг, также может быть выполнено контейнером услуг без использования какого-либо поставщика услуг.
Позвольте мне показать, как я могу достичь цель с использованием любого подхода:
Подход поставщика услуг:
В моем проекте внутри app/Service
у меня есть файлы AwesomeServiceInterface.php
и AwesomeService.php
.
Внутри AwesomeServiceInterface.php
файла, у меня есть:
namespace App\Service;
interface AwesomeServiceInterface
{
public function doAwesomeThing();
}
Внутри AwesomeService.php
файла, у меня есть:
namespace App\Service;
class AwesomeService implements AwesomeServiceInterface
{
public function doAwesomeThing()
{
echo 'do awesome thing !!!';
}
}
В файле config/app.php
я добавили в массив 'providers'
следующую строку:
App\Providers\AwesomeServiceProvider::class,
Внутри app/Providers
, у меня есть файл AwesomeServiceProvider.php
, который содержит:
public function register()
{
$this->app->bind('App\Service\AwesomeServiceInterface', 'App\Service\AwesomeService');
}
Внутри HomeController.php
, У меня есть:
use App\Service\AwesomeServiceInterface;
........
public function doAwesome(AwesomeServiceInterface $awesome_service)
{
$awesome_service->doAwesomeThing();
return '';
}
В routes/web.php
у меня есть:
Route::get('/awesome', 'HomeController@doAwesome')->name('awesome');
Теперь, когда я нажимаю на URL /awesome
, я получаю то, что ожидал, то есть do awesome thing !!!
Подход с использованием контейнера услуг:
Без создания какого-либо поставщика услуг (т. Е. AwesomeServiceProvider
), у меня есть внутри register
метод AppServiceProvider.php
в app/Providers
:
public function register()
{
$this->app->bind('App\Service\AwesomeServiceInterface','App\Service\AwesomeService');
}
На этот раз я также могу нажать URL /awesome
и получить тот же вывод, что и раньше.
Итак Q1) Зачем мне нужен какой-либо поставщик услуг в описанный выше сценарий?
Q2) в каком случае мне нужен поставщик услуг, который не может достичь цели только с помощью контейнера служб, т.е. без использования какого-либо поставщика услуг?