Pet*_*nce 16 c# castle-windsor inversion-of-control
正如主题所说,真的!他们在做什么?
Bit*_*der 17
转发类型允许您通过单个实现实现多个服务,具体示例说我们有两个接口用于处理某种树节点:
public interface INodeAlterationProvider { ... }
public interface IChildNodeListProvider { ... }
Run Code Online (Sandbox Code Playgroud)
并且各种组件依赖于这些接口中的一个或两个.但是,在实现每个接口时,您会发现它们具有很多共享功能,并且希望将实现合并到一个类中,以及其他一些功能,例如:
public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... }
Run Code Online (Sandbox Code Playgroud)
您可以注册两个NodeFactory实例,每个实例执行一个服务:
container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>());
container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Run Code Online (Sandbox Code Playgroud)
但这可能意味着NodeFactory的两个单例实例存在 - 不理想,特别是如果它构造成本高 - 并且可能使调试等更难理解,特别是如果实现了两个以上的接口.
这是转发类型的步骤,允许您将多个服务转发到同一个实现,这是执行此操作的示例:
container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Run Code Online (Sandbox Code Playgroud)
注意:此处显示的组件注册码仅适用于中继.
| 归档时间: |
|
| 查看次数: |
2960 次 |
| 最近记录: |