Разрешение списка компонентов в качестве аргумента конструктора - PullRequest
2 голосов
/ 12 июля 2011

Допустим, у меня есть интерфейс для определения отчетов о форматировании:

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 Ответ

3 голосов
/ 12 июля 2011

Используйте подрезольвер под названием CollectionResolver.

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

Я думаю, вам нужно изменить IList на IEnumerable, чтобы это работало, но не обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...