什么是Castle Windsor组件注册环境中的“ForwardedTypes”?

正如主题所说,真的! 他们在做什么?

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

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

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

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

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

 container.Register(Component.For().ImplementedBy()); container.Register(Component.For().ImplementedBy()); 

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

这是转发类型的步骤,允许您将多个服务转发到同一个实现,这是一个这样做的示例:

 container.Register(Component.For().Forward().ImplementedBy()); 

注意:此处显示的组件注册码仅适用于主干。