Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Разница между ioc и внедрением зависимостей

Автор вопроса: ParagОтветов: 5

Разница между ioc и внедрением зависимостей. объясните внедрение зависимостей весной. В чем разница между инъекцией зависимости b/w JSF и инъекцией зависимости spring..

  • Пахнет домашним заданием, вопрос интервью также имеет требовательный тон naikus 04.08.2010
  • Частичный дубликат: stackoverflow.com/questions/3226605/ Mark Seemann 04.08.2010

dependency-injectionterminology

Ответы

Ответ 1 · рейтинг 6 · Nathan

IoC означает инверсию управления.

Давайте посмотрим на некий "сильно связанный код" ("MyComponent" зависит от "Logger"):

public class MyComponent
{
  public MyComponent()
  {
  :
  }
  public void DoSomeWork()
  {
    var logger = new Logger();
  :
  }
}

Мы можем изменить его, чтобы использовать "интерфейс", но кто-то должен предоставить "реализацию":

public class MyComponent
{
  public MyComponent()
  {
  :
  }
  public void DoSomeWork()
  {
    ILogger logger = ...; // who’s going to provide this?
  :
  }
}

Внедрение зависимостей (DI) - это конкретная реализация IoC.

//Dependency Injection pattern
public class MyComponent
{
  private ILogger _logger;
  public MyComponent(ILogger logger)
  {
    _logger = logger;
  }
  public void DoSomeWork()
  {
    // Use the logger component here
    _logger.Log();
   :
  }
}

Другой реализацией является Service Locator.

//Service Locator pattern
public class MyComponent
{
    public MyComponent()
    {
        :
    }
    public void DoSomeWork()
    {
        ILogger logger = ServiceLocator.GetService();
        :
    }
}

Мартин Фаулер утверждает: "При использовании локатора службы класс приложения явно запрашивает его, отправляя сообщение локатору. При внедрении нет явного запроса, сервис появляется в классе приложения - отсюда и инверсия управления".

Также: "Выбор между Service Locator и Dependency Injection менее важен, чем принцип отделения конфигурации сервиса от использования сервисов внутри приложения. "

Вы можете проверить этот пост: Инверсия зависимостей: локатор службы или зависимость Инъекция

Также:

ASP.NET MVC: разрешить или внедрить? Вот в чем проблема... Дино Эспозито

Инверсия контейнеров управления и шаблон внедрения зависимостей, Мартин Фаулер

InversionOfControl Мартина Фаулера

Ответ 2 · рейтинг 4 · Tyson

Термины "внедрение зависимостей" (DI) и "инверсия управления" (IoC) обычно используются взаимозаменяемо для описания одного и того же шаблона проектирования (хотя не все согласны с этим, и некоторые люди склонны применять их немного по-разному). Первоначально шаблон назывался IoC, но Мартин Фаулер предложил перейти на DI, потому что все фреймворки каким-то образом инвертируют управление, и он хотел уточнить, какой аспект управления инвертируется.

Эта статья о внедрении зависимостей содержит обзор и ссылается на статью Фаулера. Он также менее специфичен для конкретных технологий, таких как Spring и PicoContainer, и содержит ссылки на некоторые другие интересные статьи по этой теме. Согласитесь с приведенным выше плакатом, статья Фаулера является каноническим чтением по этому вопросу и также дает отличный обзор.

Ответ 3 · рейтинг 1 · Ryk

IoC - это шаблон проектирования, и большинство контейнеров IoC используют внедрение зависимостей. Существуют разные типы внедрения зависимостей, но лучше всего прочитать несколько из этих статей, которые мне помогли;

CodeProject

Контейнер IoC

Контейнер Windsor

Руководство для начинающих

Ответ 4 · рейтинг 1 · Contango

См. Внедрение зависимостей в .NET Марка Симанна.

Ответ 5 · smartcaveman

Лучшая статья, которую вы найдете на эту тему, написана Мартином Фаулером по адресу http://martinfowler.com/articles/injection. HTMLа> . Что касается JSF, эта статья http://java.dzone.com/articles/jsf-anti-patterns-and-pitfalls, по-видимому, указывает на то, что разница заключается в том, что JSF использует внедрение сеттера, а не внедрение конструктора (которое обычно предпочтительнее).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы