C# Castle Windsor抽象类依赖注入
温莎城堡用作IoC容器。 有C# Castle Windsor抽象类依赖注入,c#,dependency-injection,inversion-of-control,abstract-class,castle-windsor,C#,Dependency Injection,Inversion Of Control,Abstract Class,Castle Windsor,温莎城堡用作IoC容器。 有IPipeline接口。它由基类实现:PipelineBase:IPipeline。反过来,它由两个类继承:FishPipeline:PipelineBase和octopuspipline:PipelineBase 有两类客户,必须将上层客户注入: 头等舱LargeAquarium需要FishPipeline和OctopusPipeline。第二个TinyAquarium只需要FishPipeline 我怎样才能解决它?是否需要添加IFishPipeline和IOct
IPipeline
接口。它由基类实现:PipelineBase:IPipeline
。反过来,它由两个类继承:FishPipeline:PipelineBase
和octopuspipline:PipelineBase
有两类客户,必须将上层客户注入:
头等舱LargeAquarium
需要FishPipeline
和OctopusPipeline
。第二个TinyAquarium
只需要FishPipeline
我怎样才能解决它?是否需要添加
IFishPipeline
和IOctopusPipeline
接口?不,只要注入的对象需要暴露不属于IPipeline
的东西,采用Matías的答案,我就可以这样做:
鉴于FishPipeline
和OctopusPipeline
都有自己的附加成员要访问,这些成员没有在IPipeline
中声明,无论如何,我们需要两个新接口,IOctopusPipeline
其中一个。然后:
IOctopusPipeline: IPipeline
PipelineBase: IPipeline
OctopusPipeline: PipelineBase, IOctopusPipeline
然后注入:
_container.Register(Component.For<IOctopusPipeline>().ImplementedBy<OctopusPipeline>());
\u container.Register(Component.For().ImplementedBy());
@ValeO您想要什么样的样品D只是,如果您需要注入对象作为ipipepeline
来访问比它本身提供的成员更多的成员,那么您需要创建一个IPipelineExtended
(名称由您决定),并提供更多的成员来通过类实现,然后将此界面配置为组件,而不是ipipepeline
@ValeO也许您觉得我的答案太短了,但有时短答案更好!我很高兴你有这个想法。这只是关于使用常规接口,就像在任何C#代码中一样。你应该添加如何获得解决方案作为答案,而不是作为问题的一部分,但是接口不能实现类!我说的是ioctopuspipline:PipelineBase,ioctopuspipline
。我知道PipelineBase
是一个类。我错了吗?哦,错了。这是之前的octopus管道)