2010-07-12 4 views
17

У меня возникает ощущение, что нет инверсии контроля или, скорее, правильный термин - инъекция зависимости. Я ошибаюсь, чтобы предположить это?Инверсия управления <Инъекция зависимостей

Я пытался определить IoC для себя. При этом я много узнал о контейнерах IoC и инъекции зависимостей.

Только сейчас, я прочитал это из Martin Fowler's website:

В результате я думаю, что нам нужно больше конкретное имя для этого шаблона. Инверсия управления является слишком общей, а следовательно, люди находят путают. В результате с большим количеством обсуждений с различными адвокатами IoC мы остановились на названии Dependency Injection.

В мире современного IoC нет инъекции зависимостей только одним способом достижения IoC?

+0

Для понимания концепции и важности инъекции зависимостей обратитесь к http://ganeshtiwaridotcomdotnp.blogspot.com/2011/05/understanding-dependency-injection-and.html И для полного примера подключения фасоли с помощью Spring Framework http: //ganeshtiwaridotcomdotnp.blogspot.com/2011/05/dependency-injection-with-java-spring.html Описано простым способом ... – gtiwari333

ответ

36

Если вы принимаете Fowler's definition, инверсия управления гораздо шире термин, чем DI, который охватывает все рамки использования, где вы заткнуть в рамки, но основа остается под контролем.

Например, в .NET, рамки, такие как ASP.NET или Windows Presentation Foundation, в конечном счете, в контроле, но и обеспечивают различные события и Швы вы можете использовать для создания приложения. То же самое можно сказать и на других платформах.

Dependency Injection является специализация из IoC, который применяется IoC специально для управления зависимостями.

+0

Спасибо, что проясняет ситуацию. Знаете ли вы, где я могу найти больше примеров IoC? –

+0

В действительности IoC (в отличие от DI) присутствует везде в OO.Труднее найти примеры противоположного. Я только хорошо осведомлен о платформе .NET, но почти любой тип подрамки, которую вы там используете (ASP.NET, Windows Forms, WCF и т. Д.), Является каркасом IoC. Только консольные приложения действительно выходят за рамки этой категории. –

+0

Это утверждение, данное Фаулеру: «Инверсия управления - слишком общий термин». Чтобы быть более конкретным, мне бы хотелось увидеть примеры DP и IoC. Я действительно повесил трубку, чтобы узнать больше о том, как добиться хорошего IoC через DP. –

4

Да, IoC означает, что сам класс не контролирует вещи, а вызван извне. Инъекция - это способ сделать это.

Инъекционная инъекция - действительно более конкретный термин, более четко определенный, чем инверсия управления.

6

Это один из немногих моментов, с которыми меня и Марк не согласны. По моей книге, принцип инверсии управления - same as here, поэтому я не буду его перефразировать.

Зависимость инъекции - это просто акт экстернализации создание зависимостей от внешнего мира по компонентам.

Управление этими зависимостями (и множеством других вещей) является тем, что Инверсия контрольных контейнеров делает и использует DI как часть его, представляет собой просто деталь реализации.

Смежные вопросы