2008-10-13 3 views

답변

16

전달 유형은 구체적인 예를 들어, 하나의 구현에 의해 구현되는 하나 개 이상의 서비스를 할 수 있도록 우리가 어떤 종류의 트리 노드 작업을위한 두 개의 인터페이스를 가지고 말 :

public interface INodeAlterationProvider { ... } 
public interface IChildNodeListProvider { ... } 

그리고 다양한 구성 요소가을 이러한 인터페이스 중 하나 또는 둘 모두에 대한 종속성. 당신은 NodeFactory의 두 인스턴스를 등록 할 수

public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... } 

:처럼 그러나 그 각각의 인터페이스를 구현하는 당신이 공유 많은 기능들이 있음을 발견하고 다른 기능과 함께 하나의 클래스로 구현을 병합 할 말 거기 특히, 이해하는 등 열심히하고 디버깅 할 수 있습니다 -

container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>()); 
container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>()); 

그러나 이것은 잠재적으로 NodeFactory 두 싱글 인스턴스를 의미 존재할 수 - 적합하지, 건설 비용이 많이있어 특히 각 서비스에 대한 하나는 구현 2 개 이상의 인터페이스가 구현됩니다.

container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>()); 

주 : 전달 유형이 같은 구현에 여러 서비스를 전달 할 수있는 단계 곳

이이며, 여기에 그 일의 예 여기에 표시된 구성 요소 등록 코드는 트렁크에서만 사용할 수 있습니다 .

+0

감사합니다. 그게 무엇인지 설명합니다. 그러나이를 기반으로 두 서비스를 병합하기 위해 "적절한"리팩토링을하지 않는 것에 대한 지름길과 같은 냄새가납니다 ...? –

+1

필자가 제공 한 예제에서 나는 냄새가 날 수 있었다. 나는 커프에서 벗어났다. 더 좋은 예는 ILoggerFactory를 확장하고 두 인터페이스를 모두 만족하는 단일 클래스로 구현되는 IExtendedLoggerFactory와 같은 것일 수있다. – Bittercoder

+0

아. 그래, 알았어. 나는 지난 밤에 IoC/Windsor의 Mike Hadlow의 이야기에 실제로 있었고 거기에서도 트렁크에 관한 것들을 발견했다. –

관련 문제