使用 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)
{}
}
假设我只有一个界面。
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)
{}
}