将组件列表解析为构造函数参数

时间:2011-07-11 20:48:00

标签: c# dependency-injection castle-windsor

假设我有一个界面来定义格式化报告:

public interface IFormatter 
{
    string Name {get;}
    Report Format(InputData data);
}

以及为我设置报告格式的提供程序的实现:

public FormatterProvider : IFormatterProvider
{
    private readonly IList<IFormatter> _formatter;

public FormatterProvider(IList<IFormatter> formatters)
{
    _formatters = formatters;
}

    public IFormatter GetFormatter(string name){ return _formatters.Where(x => x.Name == name); }
}

我知道我可以使用此注册注册程序集中的所有格式化程序:

container.Register(
    AllTypes.FromAssemblyName("MyCompany.Formatters")
        .BasedOn<IFormatter>()
        .WithService
        .FromInterface()
    );

但是,如何注册提供程序以便在容器中注册的任何格式化程序都传递给它的构造函数?

1 个答案:

答案 0 :(得分:3)

使用名为CollectionResolver的subresolver。

Container.Kernel.Resolver.AddSubResolver(new CollectionResolver(Container.Kernel, true));

我认为您需要将IList更改为IEnumerable以使其工作,但不能确定。