2012-04-21 3 views
5

소진 시점까지 읽었을 때 나는 약간의 지침이 필요한 것처럼 느껴진다.Castle Windsor 3.0, 서비스 및 복수 구현

Castle Windsor 3.0이 소개 되었기 때문에 부분적으로는 블로그 게시물, SO 질문 및 기타 문서의 대부분이 명시 적으로 현재 사용되지 않는 코드인지 여부에 따라 달라질 수 있습니다.

So : 문제가 있습니까?

MVC3 응용 프로그램에 백 엔드 코드를 제공하는 WCF 서비스 인 응용 프로그램에서 파일 업로드 시스템에 대한 바이러스 검색 서비스를 제공하는 다중 레이어가 있습니다. 생성자처럼 보일 수 있습니다 WCF 서비스에 따라서

public interface IScanService 
{ 
    void Execute(); 
    ScanResult GetResult(); 
} 

:

는 클라이언트가 여러 검색 서비스에 대한 지원을 요청했다

, 자연스럽게 내가 준수와 한 각 스캔 서비스는 thusly 히 IScanService 인터페이스를 구현합니다 :

public McAfeeFileScanService(IScanService mcAfeeScanService) 
    { 
     _scanService = scanService; 
    } 
내가 주입하는 IScanService 구현 유형 McAfeeScanService, 또는 NortonScanService 또는 기타 구현의 것을 전문으로 어떻게

?

기본적으로 AFAIK Windsor는 McAfeeScanService 유형인지 여부에 관계없이 처음 등록 된 구현을 제공합니다.

Windsor 3.0에서 DependsOn (Dependency.OnComponenent())을 사용하는 것이 더 이상 사용되지 않는 것 같지만 [관련 예제를 찾지 못했습니다.] 필자는 Typed Factory Facilities , 그리고 IHandlerSelector로 들어가서, (아마도 공통적이고 아마도 간단한) 작업을 위해 몇 가지 지침이 필요하다고 생각합니다.

감사합니다.

답변

7

ServiceOverride는 당신이 같은 Dependency.OnComponent를 사용할 필요가 윈저 3에서 더 이상 사용되지 않습니다 : OnComponent에

Component.For<ISerializer>().ImplementedBy<JsonSerializer>().Named("jsonSerializer"), 
Component.For<WebConnectionAcceptor, IChannelManager>().ImplementedBy<WebConnectionAcceptor>().Named("webAcceptor"), 
Component.For<ConnectionAcceptorProxy>().Named("webProxy").DependsOn(
     Dependency.OnComponent("connectionAcceptor", "webAcceptor"), 
     Dependency.OnComponent("serializer", "jsonSerializer")) 

첫 번째 인수가 이름을 구속력, 두 번째 구성 요소 이름입니다.

+1

예, 이것은 내가 온 결론인데 답장을 환호합니다. 불만이 대답으로! – M05Pr1mty

0

나는 이것에 관해 매우 게시했다. 인터페이스의 두 가지 구현이 있었고 MVC 컨트롤러가 이러한 구현 중 하나를 사용하기를 원했습니다.

article 내가 한 가지 방법을 설명하지만 첨부 된 소스 코드는 다른 두 가지 방법을 보여줍니다.

희망이 도움이됩니다.

관련 문제