Является ли это правильным способом внедрения зависимостей / DIC-фабрик? - PullRequest
0 голосов
/ 29 мая 2019

Я прочитал несколько статей, в которых говорилось, что правильный и наиболее правильный способ внедрения зависимостей - передавать только те зависимости, которые нужны вашему контроллеру, в отличие от всего контейнера (что на самом деле кажется очень распространенной практикой). , Я читал, что передача во весь контейнер не рекомендуется, так как это означает, что класс будет иметь доступ ко всем службам в нем, в результате чего класс будет иметь скрытые зависимости, что плохо.

Я прочитал, что вы должны создавать фабрики DI и передавать только необходимые зависимости. Вот что я делаю:

$container["Auth\AuthController"]=function($container){
    $view=$container->view;
    $router=$container->router;
    $auth=$container->auth;
    $validator=$container->validator;
    return new Fleet\Controllers\Auth\AuthController($view,$router,$auth,$validator);
};
$container["Auth\LoginController"]=function($container){
    $view=$container->view;
    $router=$container->router;
    $auth=$container->auth;
    $validator=$container->validator;
    return new Fleet\Controllers\Auth\LoginController($view,$router,$auth,$validator);
};
$container["HomeController"]=function($container){
    $view=$container->view;
    $router=$container->router;
    return new Fleet\Controllers\HomeController($view,$router);
};
$container["UserController"]=function($container){
    $view=$container->view;
    $router=$container->router;
    return new Fleet\Controllers\UserController($view,$router);
};
$container["VehicleController"]=function($container){
    $view=$container->view;
    $router=$container->router;
    return new Fleet\Controllers\VehicleController($view,$router);
};

Я правильно делаю? Есть ли лучший способ сделать это без всего этого в значительной степени повторяющегося кода?

...