【问题标题】:Injecting Dependencies using Castle Windsor使用 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 提供提示。您还可以使用集合解析器,它将为您提供所有类型的特定服务...

标签: c# castle-windsor


【解决方案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)
    {}
}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多