그냥 (일반적으로 계층 구조에서 발견)
의존성 삽입 (Dependency Injection) 종속성의 디커플링을 달성하기 위해 Dependency Inversion Principle
의 형태 중 하나입니다 앤디의 대답 @ 연장, DI는 일반적으로 인스턴스에 사용됩니다 기본 new() 및 Factory 메소드와 같은 패턴과 같은 시나리오. 매번 새로운 의존성 인스턴스를 삽입 할 수있을뿐만 아니라 (예 : 공장과 같이) 명명 된 인스턴스, 싱글 톤 인스턴스 등을 주입하도록 컨테이너를 설정할 수도 있습니다. 즉, IoC 컨테이너는 대개 객체의 수명 관리를 담당합니다 게다가.
잠재적 인 '사고 방식 전환'은 DI가 일반적으로 생성자 또는 공개 Get/Set 속성을 통해 주입하므로 종속성이 현재 구체적인 클래스에서 공개적으로 표시 될 수 있다는 것입니다. OO 캡슐화를 사용하는 경우 클래스의 종속성이 구현으로 간주되며 '외부'즉 클래스 메소드 서명에서 숨겨져 야하는 경우 이상하게 보일 수 있습니다. 그러나 Interface/Concrete 클래스 분리를 구현하면 (디커플링뿐 아니라 테스트/조롱 목적으로도) 주입 생성자/속성 삽입 메소드가 인터페이스에 없으므로 캡슐화가 다시 이루어집니다.
재 : "손으로 DI를하는"유니티가없는 등
당신이 할 필요가있을 것이다 것은 다음 클래스의 인스턴스를 '구축'에 대한 책임이 자신의 IoC 컨테이너를 코딩하는 것입니다 - 각시 '빌드 업'을 수행하면 클래스에 종속성 검사 (예 : 구성, 속성 또는 단순한 관례에 따라 컨테이너에 구성됨, 예를 들어 모든 공용 설정 가능 특성 또는 생성자의 클래스 매개 변수는 의존성이 있음).그런 다음 필요에 따라이 '종속성'인스턴스를 객체에 삽입합니다 (예 : 리플렉션 사용). 그런 다음 재귀 적으로 이러한 종속성의 모든 종속성을 구축해야합니다. 그런 다음 각 객체에 수명 관리를 제공해야합니다. 싱글 톤 등
앤디 감사합니다. 뷰와 뷰 모델의 컨텍스트에서 종속성 주입이 기본 뷰 모델에서 뷰를 "분리"하는 데 사용된다고 설명하는 것이 맞습니까? – user823486
조금 더 많은 문맥이 도움이 될 수 있습니다. 우리는 WPF/Silverlight 또는 다른 것을 말하고 있습니까? –
안녕하세요. 나는 WPF의 맥락에서 DI를 연구하고있다. – user823486