2012-04-21 30 views
5

Có đọc và googled đến điểm kiệt sức, tôi cảm thấy như thể tôi có thể cần một số hướng dẫn. Điều này một phần có thể là do sự ra đời của Castle Windsor 3.0, tuy nhiên hầu hết các bài đăng trên blog, SO câu hỏi và tài liệu khác rõ ràng là phụ thuộc vào những gì tôi có thể nhìn thấy bây giờ là mã không dùng nữa.Castle Windsor 3.0, Dịch vụ và Nhiều triển khai

Vì vậy: Sự cố?

Trong ứng dụng của tôi, dịch vụ WCF cung cấp mã kết thúc cho ứng dụng MVC3, tôi có nhiều lớp, một trong số đó cung cấp dịch vụ quét vi-rút cho hệ thống tải lên tệp.

Các khách hàng đã yêu cầu hỗ trợ cho nhiều dịch vụ quét, tự nhiên tôi đã tuân thủ và mỗi dịch vụ quét thực hiện một giao diện IScanService, thusly:

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

Vì vậy, trong các dịch vụ WCF, nơi các nhà xây dựng có thể trông giống như:

public McAfeeFileScanService(IScanService mcAfeeScanService) 
    { 
     _scanService = scanService; 
    } 

Làm thế nào tôi có thể chuyên IScanService được tiêm là loại triển khai McAfeeScanService hoặc NortonScanService hoặc triển khai khác?

AFAIK Windsor theo mặc định sẽ cung cấp triển khai đăng ký đầu tiên, cho dù đó là loại McAfeeScanService hay không.

Tôi đã xem xét ServiceOverrides, tuy nhiên dường như đã không được chấp nhận trong Windsor 3.0 ủng hộ DependsOn (Dependency.OnComponenent()) [nhưng tôi đã không tìm thấy bất kỳ ví dụ liên quan nào] Ive cũng đã xem xét , và vào IHandlerSelector, nhưng cảm thấy rằng một số hướng dẫn là cần thiết cho nhiệm vụ này (dường như phổ biến và có lẽ đơn giản).

Cảm ơn tất cả.

Trả lời

7

ServiceOverride bị phản đối ở Windsor 3. Bạn phải sử dụng Dependency.OnComponent như thế này:

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")) 

tranh luận đầu tiên trong OnComponent được ràng buộc tên, thứ hai là tên component.

+1

Vâng, đây là kết luận mà tôi đã đến, cổ vũ cho câu trả lời. Ill đánh dấu đây là câu trả lời! – M05Pr1mty

0

Tôi đã đăng về một cái gì đó rất giống như thế này. Tôi đã có hai triển khai của một giao diện và tôi muốn có một bộ điều khiển MVC để sử dụng một trong những triển khai thực hiện theo quyết định của tôi.

Trong article Tôi giải thích một cách để thực hiện điều đó, nhưng mã nguồn được đính kèm hiển thị hai cách khác.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan