Как мы добавляем значения в контроллере внедрения зависимостей?

У меня есть класс объекта доступа к данным (DAO), и мне нужно внедрить его в несколько моделей.

$dao = new DAO("mysql", "username", "password")
$userModel = new UserModel($dao);

Использование внедрения зависимости очень важно для меня. Так это должно выглядеть примерно так:

//My DAO class
class DAO($connection, $username, $password) {
$this->connection = $connection;
$this->username = $username;
$this->password = $password;
}

//My user model that I am injection the DAO class into
class UserModel(DAO $dao) {     //Where should i add my connection/username and password?
$this->dao = $dao;
}

К сожалению, я не могу найти способ указать свое соединение и учетные данные в конструкторе. Я также хотел бы использовать тот же экземпляр DAO и UserModel в другом месте.

Вопрос: Как я могу указать различные соединения / учетные данные для разных моделей / услуг а также сохранить тот же экземпляр DAO?

Постскриптум Я посмотрел на прыщ, Laravel DI, Spring … но не могу найти хорошее решение.

0

Решение

Контейнер IoC Laravel позволяет вам указывать разные распознаватели для разных классов.

Использовать when()->needs()->give() течь:

$container->when('UserModel')->needs('DAO')->give(function () {
return new DAO('connectionA', 'usernameA', 'passwrodA');
});

$container->when('PostModel')->needs('DAO')->give(function () {
return new DAO('connectionB', 'usernameB', 'passwrodB');
});

Увидеть документы. Ищите раздел под названием Контекстная привязка.

1

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

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

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