2011-03-25 3 views

답변

8

용어에 대한 하나의 정의가 없습니다. 하나의 컨테이너에서 "하위 컨테이너"로 구현되는 것은 종종 다른 컨테이너에서 완전히 다른 논리 기능을 갖습니다.

Autofac 및 일부 유사한 컨테이너에서 "자식 컨테이너"(v2는 "수명 범위"이후이므로)는 "부모"컨테이너보다 수명이 짧은 관련된 구성 요소 집합을 만드는 방법이며 따라서 의존성은 오직 부모와 자식간에 만 해결되고 그 반대의 방법으로는 해결되지 않습니다.

다른 컨테이너는 구현이 다르며 일부는 종속성 확인을 두 가지 방법으로 수행 할 수 있습니다 (적어도 필자의 이해를 돕기 위해).이 질문에 대한보다 정교한 답변을 얻으려면 중요한 컨테이너가 필요합니다.

희망이 도움이됩니다.

+0

나는 정확한 문맥을 가지고 있지 않다. 미안하지만, 그냥 일반적인 질문 이었어, 고마워. –

+0

도움이 되니 기쁩니다. –

3

IoC (Inversion of Control)는 실제로 수업을하는 법을 알지 못하고 수업을 사용하는 방법을 알지 못하고 수업을 서비스 및 기타 수업에 의존하게하는 방법입니다.

public class MyService 
{ 
    public void DoSomething() 
    { 
     Logger l = new Logger(); // let's assume this class exists, and it logs stuff 
     l.Info("Some info logmessage"); 
    } 
} 

을 여기에 우리가 서비스를 호출 할 수 있습니다 : 다음의 예를 고려

public class MyProgram { 
    public MyProgram() 
    { 
     MyService myService = new MyService(); 
     myService.DoSomething(); 
    } 
} 

이제 의존성 주입 또는 IOC의, 우리는 로깅의 책임을 반전 할 수 있었다. 모든 단순함에서이 의미는 MyService이 로거를 설치하는 방법을 실제로 알지 않아야하지만 사용법을 알아야한다는 것을 의미합니다. 그래서

의이 Logger 클래스가 무효 유일한 방법을 포함 ILog라는 인터페이스를 구현 가정 해 봅시다은 Info(string s)

우리는 다음이 우리의 MyService 클래스를 리팩토링 수 :

public class MyService 
{ 
    ILog _logger; 
    public MyService(ILog logger) 
    { 
      _logger = logger; 
    } 
    public void DoSomething() 
    { 

     _logger.Info("Some info logmessage"); 
    } 
} 

이것은 우리가 가진 것 의미 리 팩터로 MyProgram도 있습니다.

public class MyProgram { 
    public MyProgram() 
    { 
     ILog logger = new Logger(); // instanciate it here instead. 
     MyService myService = new MyService(logger); 
     myService.DoSomething(); 
    } 
} 

이것은 기본적으로 Inversion of Control이지만 Dependency Injection에 대해 이야기하기 시작하면이 모든 작업을 자동화 할 수 있습니다. 예를 들어 주사를 위해 Ninject를 사용하려고한다고 가정 해 봅시다. 여기서 코드 예제를 작성하지는 않겠지 만, 어떤 클래스가 ILog 인터페이스를 요청하면 Logger 클래스를 반환해야한다는 것을 알기 위해 Ninject가 실질적으로 설치됩니다.

이렇게하면 다른 인터페이스에 어떤 구현을 사용하고 싶은지 쉽게 변경할 수 있으며 테스트 가능성도 높아집니다.

Ninject를 사용하여 IoC 및 종속성 삽입의 예를 안내하는 tekpub에서 짧은 무료 비디오를 추천합니다. 이 도움이

http://www.tekpub.com/view/concepts/1

희망!

+2

IoC와 dep.injection에 대해 더 일반적으로 대답하면서 질문을 약간 잘못 읽었을 수도 있습니다. 죄송합니다 .. 어쨌든 여기에 남겨 둘 것입니다. 어쩌면 누군가를 도울 수 있습니다 :) –

+0

어쨌든 응답 해 주셔서 감사합니다 !! –

관련 문제