In Programmiersprachen ist eine Abhängigkeit als das Objekt bekannt, das von einer Klasse benötigt wird, um einige Funktionen auszuführen. Injektion ist die Übergabe dieser bestimmten Abhängigkeit an ein abhängiges Objekt / eine abhängige Klasse. Die eigentliche Bedeutung von Dependency Injection besteht darin, die Abhängigkeit von einer anderen Quelle in die Klasse zu injizieren.
Wenn Sie beispielsweise in Magento 2 eine Klasse definiert haben, die mithilfe der Magento 2-Hilfsklasse einige Daten abruft, können wir sagen, dass Ihre Klasse von diesem Magento 2-Hilfsobjekt abhängig ist.
Nehmen wir ein Beispiel:
class Customer
{
private $firstName;
private $lastName;
public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
}
class CustomerInfo
{
private $customer;
public function __construct($customerFirstName, $customerLastName)
{
$this->customer = new Customer($customerFirstName, $customerLastName);
}
public function getCustomer()
{
return $this->customer;
}
}
An dem obigen Code ist nichts auszusetzen. Der Vor- und Nachname wird ohne Probleme zurückgegeben. Die Customer-Klasse ist jedoch eng mit der CustomerInfo-Klasse gekoppelt. Wenn Sie dem Konstruktor der Kundenklasse einen neuen Parameter hinzufügen, müssen Sie jede Klasse, in der Sie ein Kundenobjekt erstellt haben, mit dem neuen Operator ändern, wodurch es einem langwierigen und langwierigen Prozess unterzogen wird, insbesondere bei großen Anwendungen .
Die Abhängigkeitsinjektion löst diese Probleme, indem die Abhängigkeiten über den Konstruktor der abhängigen Klasse injiziert werden. Das Ergebnis ist ein hochgradig wartbarer Code, der in langfristigen Projekten verwendet werden kann. Es könnte so aussehen:
class Customer
{
private $firstName;
private $lastName;
public function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFirstName()
{
return $this->firstName;
}
public function getLastName()
{
return $this->lastName;
}
}
class CustomerInfo
{
private $customer;
public function __construct(Customer $customer)
{
$this->customer = $customer;
}
public function getCustomer()
{
return $this->customer;
}
}
Im obigen Code haben wir die Abhängigkeit nicht mit dem neuen Operator instanziiert, sondern in einem __construct-Parameter definiert. Es ist als automatische Abhängigkeitsinjektion bekannt.