温莎城堡:我可以获得所有类型的实例吗?

时间:2011-03-24 20:25:27

标签: castle-windsor

我正在使用Named为Windsor注册一堆ITask实现来分隔它们。有没有办法可以请求所有ITask实例?

2 个答案:

答案 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

与给出的其他答案类似。