代码之家  ›  专栏  ›  技术社区  ›  Peter Mounce

在温莎城堡组件注册中,“前进类型”是什么?

  •  16
  • Peter Mounce  · 技术社区  · 18 年前

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

    1 回复  |  直到 17 年前
        1
  •  17
  •   Bittercoder    17 年前

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

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

    各种组件依赖于这些接口中的一个或两个。但是,在实现这些接口的过程中,您会发现它们有很多共享功能,并希望将实现与其他一些功能(比如:

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

    您可以注册两个nodefectory实例,分别为它们实现的每个服务注册一个:

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

    但这可能意味着存在两个单例的nodefectory实例-不理想,尤其是在构建成本高昂的情况下-并且可能使调试等变得难以理解,尤其是在实现了两个以上的接口时。

    这就是转发类型介入的地方,允许您将多个服务转发到同一个实现,下面是这样做的一个示例:

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

    注意:此处显示的部件注册码仅在后备箱上可用。