你是如何通过大量依赖注射处理课程的?
我可以将依赖项存储在关联数组中并将它们作为一个传递吗?
class Auth
{
// Set props.
protected $deps;
protected $Database;
protected $Constant;
protected $PasswordHash;
// and so on...
/**
* Construct data.
*/
public function __construct($deps)
{
// Set DI.
$this->deps = $deps;
$this->Database = $this->deps['Database'];
$this->PasswordHash = $this->deps['PasswordHash'];
// and so on...
}
}
在我的容器中,
// Set deps.
$deps = [
"Database" => $Database,
"PasswordHash" => new PasswordHash(HASH_COST_LOG2, HASH_PORTABLE),
// and so on...
];
// Instantiate Auth.
// Provide deps.
$Auth = new Auth($deps);
我以前没有通过单元测试完成任何测试。在DI的设计模式中,这个关联数组依赖性是可接受的。可以测试吗?
或者你有更好的解决方案?
答案 0 :(得分:1)
注入阵列感觉不对。通过使用构造函数注入,您应该强制客户端注入这些依赖项。注入包含依赖项的数组不会强制客户端。
如果Auth
类中的几乎所有方法都依赖于您在数组中传递给构造函数的对象,请随意将所有依赖项定义为构造函数中的单独参数。如果没有,请考虑更改您的设计。您可能将太多功能组合到单个类中。如果你对这个类的设计没问题,可以说2个方法取决于Database
,其他3个取决于PasswordHash
,另外1个取决于Session
等,使用setter injection for非常见的依赖关系,并根据需要注入它们。