使用 Castle Windsor 注入依赖

Injecting Dependencies using Castle Windsor

假设我只有一个界面。

interface Interface<A> {}  

现在我有 2 个 class 实现了这个接口:

class ClassOne<A>: I<A> {}
class ClassTwo<A>: I<A> {}  

现在我想在第三个 class 中使用这两个 class。

class child
{
    child(Interface<A> objCA,Interface<A> objCB)
    {}
}  

我无法使用 Castle Windsor 为 child class 注入依赖项。即使我注入它,它也只将一个 object 传递给所有这些。那么如何使用 Castle Windsor 解决这种情况?

您可以使用 Castle Windsor collection/array/list 解析器来做到这一点。

看看: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 更改为:

class child
{
    child(IEnumerable<IA> objs)
    {}
}