2012-04-21 29 views
5

疲労の点まで読んで、グーグルで調べると、私はある程度のガイダンスが必要なように感じます。城ウィンザー3.0、サービスと複数の実装

これは、Castle Windsor 3.0が導入されたことが原因の可能性がありますが、ブログ投稿、SOの質問、その他のドキュメントのほとんどは、廃止予定のコードです。

So:問題がありますか?

MVC3アプリケーションにバックエンドコードを提供するWCFサービスである私のアプリケーションでは、複数のレイヤーがあり、そのうちの1つはファイルアップロードシステム用のウイルススキャンサービスを提供します。 thusly、

クライアントは、複数のスキャンサービスのサポートを求めています自然に私が遵守していると、各スキャンサービスはIScanServiceインタフェースを実装しています:

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

をので、コンストラクタは次のように見えるかもしれWCFサービスに:

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

私は非常にこのような何かについて投稿しました。私はインターフェイスの2つの実装を持っていました。私は、MVCコントローラが私が決めた実装の1つを使用したいと考えました。

​​私はそれを行う方法の1つを説明しますが、付属のソースコードは2つの方法を示します。

これが役に立ちます。

関連する問題