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

本文关键字:构造函数 参数 组件 列表 | 更新日期: 2023-09-27 18:01:51

假设我有一个定义格式化报告的接口:

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()
    );

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

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

使用名为CollectionResolver的子解析器

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

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