我正在使用Named为Windsor注册一堆ITask实现来分隔它们。有没有办法可以请求所有ITask实例?
答案 0 :(得分:3)
Windsor可以通过CollectionResolver
子依赖性解析器执行您的请求:
var container = new WindsorContainer();
var kernel = container.Kernel;
kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));
现在,如果你注册ITask
的多个实现,你的任务运行器可以有这样的ctor:
public TaskRunner(IEnumerable<ITask> tasks)
{
// ...
}
这是你想要的,对吧?
答案 1 :(得分:0)
是,
container.ResolveAll<ITask>()
此博客文章详细解释了如何以容器无知的方式执行此操作:
10 Advanced Windsor Tricks – 3. How to resolve arrays
与给出的其他答案类似。