종속성 삽입을 사용하는 경우 종속성을 개별적으로 생성자에 전달해야합니까, 아니면 전체 DI 컨테이너를 전달할 수 있습니까?종속성 삽입 - 컨테이너 또는 개별 종속성 삽입?
예를 들어, 나는 'UserRepository'라는 저장소를 가지고 있습니다. 그것은 다음과 같은 방법을 포함 : 나는 Pimple
용기에 통과했기 때문에
<?php
namespace MyApp\Repositories;
use \MyApp\Models\User;
class UserRepository {
private $ci;
public function __construct($ci)
{
$this->ci = $ci;
}
public function hashPassword($password)
{
return password_hash($password, PASSWORD_BCRYPT, [
'cost' => 15
]);
}
public function create($firstname, $lastname, $email, $password)
{
$user = User::create([
'firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'password' => $this->hashPassword($password)
]);
return $user;
}
public function activateUser($userID)
{
$user = User($userID);
$user->email_verified = 1;
$user->save();
$verification = $user->verification();
$verification->is_used = 1;
$verification->validated_at = $this->ci->get('Carbon')::now();
$verification->save();
}
}
Carbon
의존성이 가능합니다. 나는 (등록되어있는 한) 이러한 방식으로 모든 의존성에 접근 할 수있다.
난 이런 종류의 DI를 조장하는 Slim3
을 사용하고 있습니다. 그러나, Laravel
과 같은 응용 프로그램에서는 생성자에 개별적으로 종속성이 전달되는 것을 볼 수 있습니다.
어떤 조언이 필요합니까?
전체 DI 컨테이너를 종속성으로 전달할 때이를 "서비스 로케이터"라고 부르면 좋지 않습니다. – Federkun
@Federkun 감사합니다. 나는 여드름이 서비스 탐지기라고 믿습니다, 그래서 지금 저는 그것에 매달 렸습니다. 나는 두 사람이 다르다는 것을 몰랐다. 혼란스럽지 않은 것 같습니다 : https://www.reddit.com/r/PHP/comments/3x9e48/service_locator_dependency_injection/ – BugHunterUK
아니요, 여드름은 서비스 탐지기가 아니고 서비스 탐지기로 사용할 수 있습니다 _ – Federkun