2012-03-27 3 views
2

클라이언트 어셈블리가 실제 구현을 모르고 인터페이스에서만 작동하는 인터페이스를 구현과 분리 할 수 ​​있습니까? 객체 생성을 다른 구성 요소로 오프로드하면 실제 구현 유형에 대한 종속성이 생성됩니다.구현에서 인터페이스를 분리하는 방법

인터페이스로 캐스팅 된 객체를 서비스하는 역할을 담당하는 리플렉션을 사용하여이를 수행 할 수 있습니다. 유형의 실제 인스턴스 화는 리플렉션을 통해 수행되며 키가 인터페이스이고 값이 구현 오브젝트 인 사전에 저장됩니다. 이 방법으로 클라이언트 코드는 구현 유형을 모릅니다.

리플렉션없이이를 수행 할 수있는 디자인 패턴이 있습니까? 여기에 무엇을 설명 답변

+0

디자인 패턴은 "Inversion of Control"입니다. 반사가 후드 아래에서 사용된다고 생각합니다. –

+0

MEF 및/또는 ServiceLocator를 사용해 보셨습니까? –

+0

George에게 감사드립니다. Dofactory로 가서 문제가 해결되었는지 확인합니다. – ganeshran

답변

1

반사와 같은 일부 인기 IOC를 살펴 보자. 그런 종류의 환경을 관리하고 싶지 않으면 코드의 모든 구현을 선언하고 소비자 인터페이스 만 사용하십시오.

두 가지 경우 모두 어떤 점에서 누가 진짜 유형을 결정하는 "누군가"가 있어야합니다. 플러그인 기반 로직의 경우, 예를 들어 PluginManager 일 수 있고, 다른 경우에는 factory 메소드/cals 일 수 있습니다. 당신이 ineterested하는 경우

디자인 패턴은 IoC입니다.

희망이 패턴은 제어의 반전 (IOC의)라고

1

예, 사전에

덕분에 IOC (컨트롤 컨테이너의 반전)이라고합니다 - 당신이 코드를 통해 (응용 프로그램/Web.config의에서) 구성 또는 부트 스트랩을 사용하여 반사를 제외하고.

는 플러그인 기반 시스템의 경우, 예를 들어, 동적 할당의 시나리오에서 유용 StructureMapNinject

1

을하는 데 도움이됩니다. 이것의 가장 보편적 인 응용은 Dependency Injection (DI)입니다.

Dependency Injection in .NET이이 주제에 대한 중요한 자료가 될 수 있습니다.

관련 문제