web-dev-qa-db-fra.com

Qu'est-ce qu'un conteneur DI?

Je regarde cette vidéo de cours sur l'injection de dépendance et l'instructeur a parlé de di-container mais je n'ai pas expliqué en détail, maintenant j'ai lu quelques articles et je veux confirmer que maintenant je comprends bien. Voici un programme simple et ma question est,

La classe Program ci-dessous est-elle une sorte de di-conteneur le plus simple? Sinon, à quoi ressemblerait un di-conteneur simple

interface  Implementable {
    void doSmth();
}

class A implements Implementable {

    @Override
    public void doSmth() {

    }
}

class B {

    private Implementable i;

    public B(Implementable implementable) {
        this.i= implementable;
    }

    public void doSmth(){
        i.doSmth();
    }
}

Est-ce que ce di-conteneur de classe?

class Program {
    B b = new B(new A());
    b.doSmth();
}
9
Abdurakhmon

Selon principes, pratiques et modèles d'injection de dépendance , un conteneur DI est:

une bibliothèque de logiciels qui fournit des fonctionnalités DI et permet d'automatiser de nombreuses tâches impliquées dans la composition des objets , Interception et Gestion à vie . Les conteneurs DI sont également appelés conteneurs d'inversion de contrôle (IoC). (§3.2.2)

À tout le moins, un conteneur DI permet le câblage automatique, qui est:

la possibilité de composer automatiquement un graphe d'objets à partir de cartes entre Abstractions et types concrets en utilisant les métadonnées des types fournies par le compilateur et le Common Language Runtime. (§12.1.2)

Cela signifie généralement qu'un conteneur DI analysera le constructeur d'un type et y injectera des dépendances, sans qu'il soit nécessaire de spécifier manuellement chaque argument de constructeur.

De ce point de vue, votre classe Program est pas un conteneur DI. Program agit comme votre Compositoin Root , qui est:

un emplacement (de préférence) unique dans une application où les modules sont composés ensemble. (§4.1)

Dans votre racine de composition spécifique, vous vous entraînez Pure DI , qui est la pratique de composer des graphiques d'objets à la main en utilisant le mot clé new de votre langage, par opposition à l'utilisation d'un conteneur DI.

6
Steven