我读过多篇文章,指出正确和最正确的进行依赖项注入的方法是仅传递控制器需要的依赖项,而不是整个容器(这实际上是非常普遍的做法) 。我已经读过,不建议传入整个容器,因为这意味着该类将可以访问其中的每个服务,这会导致该类具有隐藏的依赖关系,这很糟糕。
我读到您应该创建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);
};
我做对了吗?没有所有这些非常重复的代码,还有更好的方法吗?