使用 Castle Windsor 注入依赖项
Posted
技术标签:
【中文标题】使用 Castle Windsor 注入依赖项【英文标题】:Injecting Dependencies using Castle Windsor 【发布时间】:2015-12-23 15:09:58 【问题描述】:假设我只有一个界面。
interface Interface<A>
现在我有 2 个实现这个接口的类:
class ClassOne<A>: I<A>
class ClassTwo<A>: I<A>
现在我想在第三类中使用这两个类。
class child
child(Interface<A> objCA,Interface<A> objCB)
我无法使用 Castle Windsor 为子类注入依赖项。即使我注入它,它也只会将一个对象传递给所有对象。那么如何使用 Castle Windsor 解决这种情况呢?
【问题讨论】:
您不能注册一个接口的 2 个实现并期望 Windsor 知道要使用哪个服务。不过,您可以自定义分辨率管道以向 Windsor 提供提示。您还可以使用集合解析器,它将为您提供所有类型的特定服务... 详情在这里github.com/castleproject/Windsor/blob/master/docs/resolvers.md 【参考方案1】:您可以使用 Castle Windsor 集合/数组/列表解析器来做到这一点。
看一看:https://github.com/castleproject/Windsor/blob/master/docs/resolvers.md
通过这种方式,您将能够获得相同的行为,但语法略有不同。
像这样配置容器:
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
像这样注册 CA 和 CB:
container.Register(Component.For<IA>().ImplementedBy<CA>());
container.Register(Component.For<IA>().ImplementedBy<CB>());
并将您的班级更改为:
class child
child(IEnumerable<IA> objs)
【讨论】:
以上是关于使用 Castle Windsor 注入依赖项的主要内容,如果未能解决你的问题,请参考以下文章
Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0