15
正如话题所说,真的!他们在做什么?Castle Windsor组件注册中的“ForwardedTypes”是什么?
正如话题所说,真的!他们在做什么?Castle Windsor组件注册中的“ForwardedTypes”是什么?
转发的类型让你有一个单一的实现来实现,对于一个具体的例子不止一个服务说,我们有两个接口,用于与某种树节点工作:
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>());
注:此处显示的组件注册代码只适用于中继线可用。
谢谢 - 这解释了它是什么。然而,基于这一点,它闻起来像是不做一个“适当的”重构来合并两个服务的捷径......? – 2008-10-23 21:07:39