在PHP OOP中关联依赖注入的数组依赖关系?

时间:2014-11-14 10:12:58

标签: php arrays oop multidimensional-array dependency-injection

你是如何通过大量依赖注射处理课程的?

我可以将依赖项存储在关联数组中并将它们作为一个传递吗?

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的设计模式中,这个关联数组依赖性是可接受的。可以测试吗?

或者你有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

注入阵列感觉不对。通过使用构造函数注入,您应该强制客户端注入这些依赖项。注入包含依赖项的数组不会强制客户端。

如果Auth类中的几乎所有方法都依赖于您在数组中传递给构造函数的对象,请随意将所有依赖项定义为构造函数中的单独参数。如果没有,请考虑更改您的设计。您可能将太多功能组合到单个类中。如果你对这个类的设计没问题,可以说2个方法取决于Database,其他3个取决于PasswordHash,另外1个取决于Session等,使用setter injection for非常见的依赖关系,并根据需要注入它们。