Контейнер внедрения зависимостей — заводской шаблон

Я пытался узнать о внедрении зависимостей, читал и пытался закодировать небольшой контейнер для внедрения зависимостей, подобный этому: http://fabien.potencier.org/article/12/do-you-контейнердляинъекций-зависимостей

Единственное, что меня смущает, это:

Разве контейнер внедрения зависимостей не является просто прославленной реализацией фабричного шаблона?

Если да, то почему бы просто не назвать это так, зачем нужен причудливый термин только для того, чтобы запутать дело.

Если это не так, может кто-нибудь объяснить, что мне здесь не хватает?


person Marty Wallace    schedule 24.08.2012    source источник
comment
возможный дубликат Injection Dependency vs Factory Pattern   -  person podiluska    schedule 24.08.2012
comment
«Внедрение зависимостей» — это гораздо более широкий термин, чем «контейнер для внедрения зависимостей». Легко увидеть разницу между DI и Factory, но не так просто увидеть разницу между DI Container и Factory. Так что я не думаю, что это дублирующий вопрос.   -  person Russ    schedule 06.09.2013


Ответы (1)


Вы должны разделить внедрение зависимостей и инверсию управления.

Внедрение зависимостей заключается в том, что вы внедряете зависимости в класс, а не позволяете самому классу нести ответственность за свои зависимости.

Инверсия управления скорее означает, что что-то берет под контроль объект и его время жизни. В этом случае контейнер должен решить, когда и как объект должен быть создан и удален.

Фабричный шаблон — это создание нового объекта при каждом вызове. Сам шаблон ничего не говорит о том, как должны создаваться зависимости.

Вот почему вы можете настроить разные сроки жизни и использовать дочерние контейнеры для управления объектами с ограниченным временем жизни.

Я написал об этом статью здесь: http://www.codeproject.com/Articles/386164/Get-injected-into-the-world-of-inverted-dependenci

Или, если вы хотите увидеть больше примеров: http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

person jgauffin    schedule 24.08.2012