2010-08-04 2 views
2

Разница между ioc и инъекцией зависимости. объясните зависимость впрыска весной. В чем разница в/в JSF инъекции зависимостей и впрыска пружинной зависимости.Разница между ioc и зависимостью впрыска

+11

Smells домашнее задание, вопрос интервью также имеет требуемый тон – naikus

+1

Частичный дубликат: http://stackoverflow.com/questions/3226605/inversion-of-control-dependency-injection –

ответ

1

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

CodeProject

IoC Container

Windsor Container

Beginner guide

+0

спасибо, но я хочу разницу b/w инъекции зависимостей JSF и инъекции пружинной зависимости. – Parag

0

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

4

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

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

6

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 pattern 
public class MyComponent 
{ 
    public MyComponent() 
    { 
     : 
    } 
    public void DoSomeWork() 
    { 
     ILogger logger = ServiceLocator.GetService(); 
     : 
    } 
} 

Мартин Фаулер утверждает: «С локатора службы класс приложение запрашивает для него явно посланием к локатору. При инъекции явного запроса нет, сервис появляется в классе приложения - следовательно, инверсия управления. »

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

Вы можете проверить этот пост: Dependency Inversion: Service Locator or Dependency Injection

Также:

ASP.NET MVC: Resolve or Inject? That’s the Issue… Дино Эспозито

Inversion of Control Containers and the Dependency Injection pattern Мартина Фаулера

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

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