Разница между ioc и внедрением зависимостей. объясните внедрение зависимостей весной. В чем разница между инъекцией зависимости b/w JSF и инъекцией зависимости spring..
Вопрос
Разница между ioc и внедрением зависимостей
- Пахнет домашним заданием, вопрос интервью также имеет требовательный тон naikus 04.08.2010
- Частичный дубликат: stackoverflow.com/questions/3226605/ Mark Seemann 04.08.2010
Ответы
Ответ 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 используют внедрение зависимостей. Существуют разные типы внедрения зависимостей, но лучше всего прочитать несколько из этих статей, которые мне помогли;
Контейнер IoC
Руководство для начинающих
Ответ 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.
Похожие материалы
- Unity: Interception (AOP) перехватывает свойства? а также методы перехвата на форме (winform)?
- Не удается передать параметр в фабрику Windsor Typed Factory.
- Контейнер зависимостей: как создать экземпляры объекта
- Внедрение зависимостей Unity для служб WCF
- Аннотация над X
- Почему разыменование указателя называется разыменованием?