" Это не что иное, как необычная хеш-таблица объектов. "
Хотя вышесказанное является огромным преуменьшением, это простой способ думать о них.С учетом коллекции, если вы попросите один и тот же экземпляр класса - контейнер DI решит, предоставить ли вам кэшированную версию или новую, и т. Д.
Их использование делает его легче и чище, когдаречь идет о подключении зависимостей.Представьте, что у вас есть следующие псевдо-классы.
class House(Kitchen, Bedroom)
// Use kitchen and bedroom.
end
class Kitchen()
// Code...
end
class Bedroom()
// Code...
end
Строительство дома - это боль без контейнера DI, вам необходимо создать экземпляр спальни, а затем экземпляр кухни.Если бы у этих объектов тоже были зависимости, вам нужно было их подключить.В свою очередь, вы можете потратить много строк кода, просто подключая объекты.Только тогда вы сможете создать настоящий дом.Используя контейнер DI / IOC (Inversion of Control), вы говорите, что хотите получить домашний объект, контейнер DI будет рекурсивно создавать каждую из его зависимостей и возвращать вам дом.
Без контейнера DI / IOC:
house = new House(new Kitchen(), new Bedroom());
С контейнером DI / IOC:
house = // some method of getting the house
В конце дня они облегчают выполнение кода, делают его прощенаписать и переложить ответственность за совместное подключение объектов от рассматриваемой проблемы.