간단한 용어 및/또는 고급 의사 코드에서 DI 컨테이너는 어떻게 작동하며 어떻게 사용됩니까?DI 컨테이너 작동 방식에 대한 간단한 설명?
답변
핵심 요소 인 DI 컨테이너는 인터페이스와 콘크리트 유형 간의 매핑을 기반으로 객체를 생성합니다. 이것은 당신이 컨테이너에서 추상 형식을 요청할 수
는:
IFoo f = container.Resolve<IFoo>();
이것은 당신이 예를 푸 위해 (IFoo를 구현하는 구체적인 클래스에 IFoo에서 매핑 컨테이너를 구성 이전에 있어야합니다).
자체가 특히 인상적 않겠지 만 DI 컨테이너는 더 많은 일을 할 :
- 그들은 그들이 자동으로 IFoo 푸에 매핑하고있는 경우 IBar가 매핑 알아낼 수 있다는 것을 의미한다 자동 배선를 사용 Bar,하지만 Foo는 IBar에 의존성이 있습니다. IFoo를 요청하면 Foo 인스턴스가 만들어집니다.
- 구성 요소의 평생을 (를) 관리합니다. 매번 Foo의 새로운 인스턴스를 원하지만, 다른 인스턴스에서는 동일한 인스턴스를 원할 수도 있습니다. 매번 Foo의 새로운 인스턴스를 원할 수도 있지만 주입 된 Bar는 같은 인스턴스로 남아 있어야합니다.
수동 구성 당신이
많은 DI 컨테이너 위보다 훨씬 더 많은 일을 할 수있는 DI 컨테이너 :)으로 제공하는 서비스를 감상 시작해야 및 수명을 관리하려고 시작하지만 그 후 핵심 서비스입니다. 대부분의 컨테이너는 configuring via either code or XML에 대한 옵션을 제공합니다.
컨테이너의 사용에 관해서는 Krzysztof Kozmic이 방금 a good overview을 게시했습니다.
DI 컨테이너를 구성하면 인터페이스와 유형, 즉 각 인터페이스가 유형에 매핑되는 방식을 알 수 있습니다.
Resolve
을 호출하면 매핑을보고 요청한 매핑 된 개체를 반환합니다.
일부 DI 컨테이너는 구성에 대한 규칙을 사용합니다. 예를 들어 인터페이스 ISomething
을 정의하면 인스턴스화하고 반환 할 구체 Something
유형을 찾습니다.
는 "그것은 개체의 멋진 해시 테이블보다 더 아무것도 없다."
을 위에서 그들에 대해 생각하는 쉬운 방법 대규모 삼가된다. 컬렉션이 주어지면 클래스의 동일한 인스턴스를 요청하면 DI 컨테이너가 캐시 된 버전이나 새 버전을 제공할지 여부를 결정합니다.
의존성을 배선 할 때 그 사용법을 사용하면 더 쉽고 깨끗하게 정리할 수 있습니다. 다음과 같은 의사 클래스가 있다고 상상해보십시오. 집을 건설
class House(Kitchen, Bedroom)
// Use kitchen and bedroom.
end
class Kitchen()
// Code...
end
class Bedroom()
// Code...
end
는 DI 컨테이너없는 고통, 당신은 부엌의 인스턴스 다음에 침실의 인스턴스를 생성 할 필요가있다. 이러한 객체에 종속성이있는 경우 해당 객체를 연결해야합니다. 차례 차례로 객체를 연결하는 코드를 여러 줄 쓸 수 있습니다. 그래야만 유효한 집을 만들 수 있습니다. 집 객체를 원한다고 말하는 DI/IOC (Inversion of Control) 컨테이너를 사용하면 DI 컨테이너가 각각의 의존성을 반복적으로 만들고 집을 반환합니다. DI/IOC 컨테이너없이
:
DI와house = new House(new Kitchen(), new Bedroom());
/IOC 컨테이너 : 하루의 끝에서
house = // some method of getting the house
는 쉽게 코드를 작성하고 책임을 이동하는, 쉽게 따라 할 수 있도록 문제를 해결할 수 있도록
DI는 사용자가 자신의 복잡한 생성자와 자신의 코드를 작성하지 않아도되고 여러 가지를 구성하는 것을 멈추게하므로 좋은 점에 유의해야합니다. 예, 필요하지는 않지만 기존 라이브러리를 활용하여 모든 것을 처리 할 수 있다면 좋을 것입니다. 자바 애플리케이션 구성 (C #은 전문 지식 영역이 아닙니다)은 가난하고 일관성이없고 복잡한 스크립팅 언어로 작업하는 것처럼 보입니다 ... –
- 1. C에서 스택이 작동하는 방식에 대한 설명
- 2. 온라인 상점의 작동 방식에 대한 문서 검색
- 3. DI 컨테이너 : 객체에 대한 구성을 전달하는 방법
- 4. Ninject : 공유 DI/IoC 컨테이너
- 5. Windows 모바일 응용 프로그램의 IoC/DI 컨테이너
- 6. 여러 ASP.Net 응용 프로그램을위한 하나의 DI 컨테이너
- 7. Android 암호화 작동 방식에 대해 혼동이 있음
- 8. DI/IoC 컨테이너 성능 벤치 마크 비교?
- 9. 람다 식에 대한 아주 간단한 설명
- 10. SICP의 마지막 두 장에 대한 간단한 설명
- 11. macsec 및 ipsec에 대한 간단한 설명
- 12. 범위 지정 규칙에 대한 간단한 설명?
- 13. Magento - Google 기본 설명에 대한 간단한 설명
- 14. Rails 방식에 대한 조언이 필요합니다.
- 15. 누구나 Visual Studio 용 Crystal Reports의 작동 방식에 대한 훌륭한 자습서를 알고 계십니까?
- 16. DI/IOC에 대한 매개 변수를 어떻게 주문해야합니까?
- 17. Wordpress의 간단한 설명
- 18. DI 및 IoC 컨테이너에 대한 질문
- 19. Minecraft Renderengine에 대한 설명
- 20. 새 캔버스 HTML 요소의 작동 방식에 대한 좋은 정보는 어디에서 찾을 수 있습니까?
- 21. contrib_to_class에 대한 설명
- 22. 작동 가능성이있는 twitter4r에 대한 가장 간단한 샘플 프로그램은 무엇입니까?
- 23. 문자열 조작의 간단한 프롤로그 설명
- 24. 구조체가 C 언어로되어있는 것에 대한 명확하고 간단한 설명
- 25. DHT (Distributed Hash Table)에 대한 간단한 기본 설명
- 26. "Unified Modeling Language"에 대한 간단한 설명, 왜 중요합니까?
- 27. DI/IoC 컨테이너로 열어두기
- 28. DI 컨테이너에 대한 참조는 어디에 저장해야합니까?
- 29. DI 외부 DLL 사용
- 30. 버튼 트리거 삽입 파일이 컨테이너 필드에 대한 편집 상자가 포함 된 경우에만 작동
쇼트 & 스위트 & 유독 자동차 무료! – Shog9