2008-10-13 60 views

回答

16

转发的类型让你有一个单一的实现来实现,对于一个具体的例子不止一个服务说,我们有两个接口,用于与某种树节点工作:

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

而且各个部件需要依赖于这些接口中的一个或两个。然而,在实施每一个这些接口的你会发现,他们是一个很大的共享功能,并希望将实现合并成一个单一类的一些其他功能一起说,如:

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

你可以注册NodeFactory的两个实例,为每个服务,他们实现:

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

但是,这可能意味着NodeFactory两个单实例存在 - 不理想,尤其是如果它是昂贵的构建 - 并且可以使调试等更难理解,尤其是如果有两个以上的接口正在实施。

这是转发类型的介入,让您在多个服务相同的实现转发,这里是这样做的一个例子:

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

注:此处显示的组件注册代码只适用于中继线可用。

+0

谢谢 - 这解释了它是什么。然而,基于这一点,它闻起来像是不做一个“适当的”重构来合并两个服务的捷径......? – 2008-10-23 21:07:39

相关问题