캐슬 윈저는 제어 도구의 역전입니다. 같은 다른 사람들이 있습니다.
미리 빌드되고 미리 연결된 종속성이있는 객체를 바로 제공 할 수 있습니다. "새"연산자가 아닌 반사 및 구성을 통해 생성 된 전체 객체 그래프.
여기에서 시작하십시오 : http://tech.groups.yahoo.com/group/altdotnet/message/10434
이메일 전송 클래스가 있다고 가정하십시오. EmailSender. 다른 클래스 WorkflowStepper가 있다고 상상해보십시오. WorkflowStepper 내에서 EmailSender를 사용해야합니다.
당신은 항상 말할 수 있었다 new EmailSender().Send(emailMessage);
그러나 그것의 사용은 new
변경하기 어려운 TIGHT COUPLING을 만듭니다. (이것은 결국 작은 고안된 예입니다)
WorkflowStepper 내부에서이 나쁜 소년을 새로 만드는 대신 생성자에 전달한 경우 어떻게됩니까?
그래서 전화를 한 사람은 EmailSender를 새로 만들어야했습니다.
new WorkflowStepper(emailSender).Step()
하나의 책임 (Google SRP) 만있는 수백 개의 작은 클래스가 있다고 가정하고 WorkflowStepper에서 몇 가지 클래스를 사용한다고 가정 해보십시오.
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
의 세부 사항에 대해 걱정하지 상상 EmailSender
작성중인 경우 WorkflowStepper
또는AlertRegistry
당신은 당신이 일하고있는 우려에 대해 걱정할뿐입니다.
RUN TIME에 객체와 종속성의이 전체 그래프 (트리)가 연결되어 있다고 상상해보십시오.
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
WorkflowStepper
필요한 곳에서 자동으로 채워지는 모든 종속성을 실제로 처리 합니다.
없습니다 new
그것은 무엇이 필요한지 알고 있기 때문에 발생 합니다.
또한 테스트 가능하고 반복 가능한 방식으로 더 나은 디자인의 DRY 코드로 결함을 줄일 수 있습니다.