Castle Windsor:我可以获得某种类型的所有实例吗?

问题描述:

我正在注册一系列的ITask实现与温莎使用命名将它们分开。有没有类可以请求所有ITask实例的方法?Castle Windsor:我可以获得某种类型的所有实例吗?

+1

我正在写我的应用程序容器无知,所以我正在寻找一种方法,将通过构造函数工作。 – 2011-03-24 21:03:21

温莎可以做你通过CollectionResolver subdependency解析请求的内容:

var container = new WindsorContainer(); 
var kernel = container.Kernel; 
kernel.Resolver.AddSubResolver(new CollectionResolver(kernel)); 

现在,如果你注册的ITask多个实现,你的任务运行可以有一个这样的构造函数:

public TaskRunner(IEnumerable<ITask> tasks) 
{ 
    // ... 
} 

这是你想要的,对吧?

+0

完美。谢谢。 – 2011-03-25 00:04:09

是,

container.ResolveAll<ITask>() 

本博客文章详细解释了如何做到这一点的容器无知方式:

10 Advanced Windsor Tricks – 3. How to resolve arrays

给予对方的回答相似。

+1

对不起,我错过了一个观点,即我的应用程序是容器无知,因此容器调用会有点吮吸......如果这是我可以隐藏在TaskResolver中的唯一方法,那么我的主人可以通过它请求构造函数。 – 2011-03-24 21:03:51