什么是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());
注意:此处显示的组件注册码仅适用于主干。