2013-03-16 4 views
0

Я использую шаблон реестра очень долгое время. В принципе, я загружаю все классы с использованием основного объекта (даже если они не требуются самим контроллером), и контроллеры могут их достичь.Предварительные требования перед запуском объекта контроллера. Это называется контейнером DI?

В настоящее время он загружается как 20 классов, и я хочу изменить свой подход.

Я хочу определить зависимости для своих контроллеров. Например, мой контроллер регистров зависит только от класса базы данных, класса recaptcha и класса фильтра.

Итак, я хочу, чтобы создать решение, как это:

//dependencies 
$registerDependencies = array(new Database(), new Recatpcha(), new Filter()); 

//load register controller 
$this->loadController->('register', $this->loadDependencies($registerDependencies)); 

Это называется DI/DI Container? Является ли это лучшим подходом, чем моя текущая система?

ответ

0

я бы, вероятно, использовать этот подход:

$this->loadController->register('database.main', 'Database') 
        ->register('database.user', 'Database') 
        ->register('recaptcha', 'Racatpcha'); 

и функцию регистра будет выглядеть следующим образом

public function register($serviceName, $serviceClass) 
{ 
    // you can inject options to your class via a config array or a conf file 
    $this->registry[$serviceName] = new $serviceClass(); 
} 

Если вы даете псевдоним к вашим услугам, вы можете иметь несколько услуг, которые разделяют тот же класс, но с разными параметрами. Служба «database.main» может подключаться к БД и «database.user» к другой БД.

Symfony2 использует инъекцию зависимости, и вы можете найти documentation about the component on their website.

+0

Что это за подход называется? DI или DI, или ни один из них? –

Смежные вопросы