Я загрузил источник для Castle.MicroKernel и заметил, что уже есть ArrayResolver и ListResolver (в пространстве имен Castle.MicroKernel.Resolvers.SpecializedResolvers). Код, который я скопировал (вслепую) из блога Хаммета, не работал, скорее всего потому, что с момента его написания структура изменилась.
Вот пример проекта, демонстрирующего, как это сделать: http://www.panteravb.com/downloads/WindsorCon.zip
Я попробовал и ArrayResolver, и ListResolver, и они оба работали без проблем, это довольно просто, поэтому предположим, что класс обслуживания:
public class MyService
{
private IEnumerable<IRule> _rules;
public MyService(IList<IRule> rules)
{
_rules = rules;
}
}
Вы можете зарегистрировать этого парня так:
private IWindsorContainer _container;
private void InitializeIoc()
{
_container = new WindsorContainer();
_container.Kernel.Resolver.AddSubResolver(new ListResolver(_container.Kernel));
_container.Register(Component.For<IRule>().ImplementedBy<Rule1>());
_container.Register(Component.For<IRule>().ImplementedBy<Rule2>());
_container.Register(Component.For<MyService>());
}