Bit*_*der 17

转发类型允许您通过单个实现实现多个服务,具体示例说我们有两个接口用于处理某种树节点:

public interface INodeAlterationProvider { ... }
public interface IChildNodeListProvider { ... }
Run Code Online (Sandbox Code Playgroud)

并且各种组件依赖于这些接口中的一个或两个.但是,在实现每个接口时,您会发现它们具有很多共享功能,并且希望将实现合并到一个类中,以及其他一些功能,例如:

public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... }
Run Code Online (Sandbox Code Playgroud)

您可以注册两个NodeFactory实例,每个实例执行一个服务:

container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>());
container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Run Code Online (Sandbox Code Playgroud)

但这可能意味着NodeFactory的两个单例实例存在 - 不理想,特别是如果它构造成本高 - 并且可能使调试等更难理解,特别是如果实现了两个以上的接口.

这是转发类型的步骤,允许您将多个服务转发到同一个实现,这是执行此操作的示例:

container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Run Code Online (Sandbox Code Playgroud)

注意:此处显示的组件注册码仅适用于中继.