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

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


我认为您需要将IList更改为IEnumerable才能完成这项工作,但不能肯定。

关于c# - 将组件列表解析为构造函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6656361/

10-12 22:01