저는 IOC 개념에 새로운 것이므로 다른 컨텍스트에서 다른 클래스를 해결하는 데 도움이된다는 사실을 이해합니다. 당신의 호출 클래스는 인터페이스와 인터페이스와 상호 작용할 것이고, 당신에게 어떤 구현이 주어 졌는지를 결정할 것이고, 객체를 새롭게 처리 할 것입니다.IOC 및 바인딩을 이해하려고 시도합니다.
내 질문은 그 기반으로하기 때문에 이해가 잘못 생각하는 경우 정정 해줘 제발 :이 도움이 이해
private readonly IEmailService emailService;
private readonly ITemplateRenderer templateRenderer;
private readonly IHtmlToTextTransformer htmlToTextTransformer;
public TemplateEmailService(IEmailService emailService,
ITemplateRenderer templateRenderer,
IHtmlToTextTransformer htmlToTextTransformer)
{
this.emailService = emailService;
this.htmlToTextTransformer = htmlToTextTransformer;
this.templateRenderer = templateRenderer;
}
: 이제
, 나는이 프로젝트에 매우 자주이 패턴을 참조 새 클래스를 사용하지 않고 이러한 클래스의 모든 구현을 사용하고 IOC가 구현할 구현을 결정할 필요가 없습니다.
하지만이 코드는 IOC 구성 파일을 건드리지도 않습니다. 그리고 다시 나는 2 일 동안 자식을 보내고 있지만, 읽은 모든 튜토리얼에서 "아이를 결정해라."라는 말을 구성하기를 기대했다. 그러나 그것은 나 같은 것이 없어도 작동합니다. 이 인터페이스의 구현이 하나뿐이기 때문입니까? 그리고 만약 내가 하나 이상의 구현을하고 다음에만 내가 명시 적으로 해결할 구성해야 할 것인가?
글쎄, 나는 생각했다. 특정 인터페이스의 유일한 구현이있을 때, IOC는 독자적으로 알아낼 것이다 (최소한 구조지도는 그렇게한다). 명시 적 구성은 여러 구현이있는 경우에만 수행해야합니다. – TeaLeave
일부 IoC 및 DI 프레임 워크는 "컨벤션 오버 컨벤션"패러다임을 사용합니다. 따라서 인터페이스를 구현하는 IFoo와 Foo 클래스가 있다면이 프레임 워크는 IFoo를 구현하는 다른 클래스가 있어도 IFoo를 Foo로 해석합니다. 실제로 그것은 더 복잡 할 수 있지만 이것은 주요 아이디어입니다. 나도 알다시피, 원래 Ruby On Rails에서 구조화되었으며 구조 맵에서도이를 지원합니다 (http : // codebetter.com/jeremymiller/2009/01/20/create-your-own-auto-registration-convention-with-structuremap /) – Nikolay