2008-10-13 23 views

Trả lời

16

loại chuyển tiếp cho phép bạn có nhiều hơn một dịch vụ được thực hiện bởi một thực hiện duy nhất, cho một ví dụ cụ thể nói rằng chúng ta có hai giao diện để làm việc với các nút cây của một số loại:

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

Và các thành phần khác nhau tham gia một phụ thuộc vào một hoặc cả hai giao diện đó. Tuy nhiên trong việc thực hiện mỗi người giao diện bạn khám phá ra rằng họ là rất nhiều chức năng chia sẻ và muốn kết hợp việc triển khai thành một lớp duy nhất cùng với một số tính năng khác nói như:

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

Bạn có thể đăng ký hai trường hợp của NodeFactory, một cho mỗi dịch vụ mà họ thực hiện:

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

Nhưng điều này có khả năng có thể có nghĩa hai trường hợp singleton của NodeFactory tồn tại - không lý tưởng, đặc biệt là nếu nó tốn kém để xây dựng - và có thể làm cho gỡ lỗi, vv khó hiểu, đặc biệt là nếu có hơn hai giao diện đang được triển khai.

Đây là nơi mà các loại chuyển tiếp bước vào, cho phép bạn chuyển tiếp nhiều dịch vụ để thực hiện tương tự, đây là một ví dụ về làm điều đó:

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

Lưu ý: mã số đăng ký phần đưa ra ở đây chỉ có sẵn trên thân cây .

+0

Cảm ơn - điều đó giải thích nó là gì. Tuy nhiên, dựa trên đó, nó có mùi giống như một phím tắt để không thực hiện tái cấu trúc "thích hợp" để hợp nhất hai dịch vụ ...? –

+1

Cũng có thể là một mùi trong ví dụ mà tôi đã cung cấp, tôi đã nghĩ ra điều đó ... một ví dụ có thể giống như IExtendedLoggerFactory mở rộng ILoggerFactory và được thực hiện bởi một lớp duy nhất thỏa mãn cả hai giao diện. – Bittercoder

+0

Ah; vâng, tôi có thể thấy điều đó. Tôi đã thực sự nói chuyện của Mike Hadlow trên IoC/Windsor đêm qua và phát hiện ra một số điều về thân cây ở đó, quá :) –

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