使用 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

依赖注入 Castle.Windsor高级应用

Castle.Windsor依赖注入的高级应用

使用 Castle Windsor 进行 WCF 依赖注入 - 请帮忙?

Castle Windsor 实现依赖注入和APO

对Castle Windsor的Resolve方法的解析时new对象的探讨