将组件列表解析为构造函数参数
本文关键字:构造函数 参数 组件 列表 | 更新日期: 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以使此工作,但不确定。