Что такое DI-контейнер? - PullRequest
0 голосов
/ 06 июня 2018

Я смотрю это видео курса о внедрении зависимости, и инструктор говорил о di-container, но не объяснил подробно, сейчас я читаю некоторые статьи и хочу подтвердить, что теперь я правильно понимаю.Ниже приведена простая программа, и мой вопрос таков:

Является ли приведенный ниже класс программы своего рода простейшим ди-контейнером?если нет, то как бы простой ди-контейнер был бы похож на

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();
    }
}

Является ли этот класс ди-контейнер?

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

1 Ответ

0 голосов
/ 06 июня 2018

Согласно Принципам, методам и шаблонам внедрения зависимостей , контейнер DI представляет собой:

программную библиотеку, которая обеспечивает функциональные возможности DI и позволяет автоматизировать многие иззадачи, включенные в Состав объекта , Перехват и Управление временем жизни . DI-контейнеры также известны как контейнеры инверсии управления (IoC). (§3.2.2)

Как минимум, DI-контейнер допускает автоматическое подключение

возможность автоматически составлять граф объектов из карт между Abstractions и конкретными типами, используя метаданные типов, предоставленные компилятором иCommon Language Runtime. (§12.1.2)

Это обычно означает, что DI-контейнер будет анализировать конструктор типа и вставлять в него зависимости, без необходимости указывать каждый из них.аргумент конструктора вручную.

С этой точки зрения ваш класс Program является , а не контейнером DI.Program действует как ваш Compositoin Root , который является:

(предпочтительно) уникальным местоположением в приложении, где модули составляются вместе. (§4.1)

В вашем конкретном корне композиции вы практикуете Pure DI , который представляет собой практику составления графов объектов вручную с использованием ключевого слова new вашего языка, в отличие отпо использованию DI-контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...