摘要 class 温莎城堡的依赖注入
Abstract class dependency injection with Castle Windsor
Castle Windsor 用作 IoC 容器。
有IPipeline
界面。它由基础 class: PipelineBase : IPipeline
实现。依次由两个 classes 继承:FishPipeline : PipelineBase
和 OctopusPipeline : PipelineBase
.
有两个客户classes,上面的classes必须注入:
首先 class LargeAquarium
需要 FishPipeline
和 OctopusPipeline
。第二个 TinyAquarium
只需要 FishPipeline
.
我该如何解决?是否需要添加IFishPipeline
和IOctopusPipeline
接口?
不,只要注入的对象需要公开不属于 IPipeline
的内容即可。
通过采用 Matías 的回答,我可以这样做:
考虑到 FishPipeline
和 OctopusPipeline
都有自己的额外成员要访问,这些成员没有在 IPipeline
中声明,无论如何我们需要两个新接口,[=15= 】 其中之一。那么:
IOctopusPipeline: IPipeline
PipelineBase: IPipeline
OctopusPipeline: PipelineBase, IOctopusPipeline
然后注入:
_container.Register(Component.For<IOctopusPipeline>().ImplementedBy<OctopusPipeline>());
Castle Windsor 用作 IoC 容器。
有IPipeline
界面。它由基础 class: PipelineBase : IPipeline
实现。依次由两个 classes 继承:FishPipeline : PipelineBase
和 OctopusPipeline : PipelineBase
.
有两个客户classes,上面的classes必须注入:
首先 class LargeAquarium
需要 FishPipeline
和 OctopusPipeline
。第二个 TinyAquarium
只需要 FishPipeline
.
我该如何解决?是否需要添加IFishPipeline
和IOctopusPipeline
接口?
不,只要注入的对象需要公开不属于 IPipeline
的内容即可。
通过采用 Matías 的回答,我可以这样做:
考虑到 FishPipeline
和 OctopusPipeline
都有自己的额外成员要访问,这些成员没有在 IPipeline
中声明,无论如何我们需要两个新接口,[=15= 】 其中之一。那么:
IOctopusPipeline: IPipeline
PipelineBase: IPipeline
OctopusPipeline: PipelineBase, IOctopusPipeline
然后注入:
_container.Register(Component.For<IOctopusPipeline>().ImplementedBy<OctopusPipeline>());