Как сделать автоматизированный инжектор зависимостей?

Поэтому я разрабатываю фреймворк и до сих пор использую контейнер, который может вызываться статически в приложении:

$router = new Router;
Container::set('router', $router); // this can now be called anywhere

Это тогда в любом другом файле в приложении, можно назвать так:

$router = Container::get('router'); // get the router object with all current data
$router->add_route('/blog', '/Path/To/Controller/Blog@index');

Внутри контроллера я бы тогда имел:

class Blog_Controller extends Base_Controller
{
public function __construct()
{
$this->blog_model = Container::get('Blog_Model'); // this is instantiated OR if it has already, the container returns the existing object INCLUDING all of its properties thus far.
}

public function view($id)
{
$this->blog_model->get_post($id);
}
}

Тем не менее, я прочитал о том, как создавать DI-контейнеры, которые внедряют зависимости при вызове контроллера, как в примере ниже:

class Blog_Controller extends Base_Controller
{
public function __construct(Blog_Model $blog_model)
{
$this->blog_model = $blog_model; // this is instantiated OR if it has already, the container returns the existing object INCLUDING all of its properties thus far.
}

public function view($id)
{
$this->blog_model->get_post($id);
}
}

У меня проблемы с выяснением, как эффективно это сделать.

Как бы я мог создать экземпляр Blog_Model (или вернуть, если он уже был) без необходимости делать это вручную new Blog_Model,

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]