@ Metro Smurf: ваш ответ дал мне правильный путь: Unity не может автоматически разрешить IEnumerable<T>
зависимости.
Я не смог скомпилировать ваш пример, поскольку метод RegisterType
не принимает экземпляр InjectionConstructor
в качестве параметра.
Также обратите внимание, что метод ResolveAll
будет работать только в том случае, если вы зарегистрировали несколько типов с разными именами, а также этот метод НЕ возвращает экземпляр для регистрации по умолчанию (без имени). (Между прочим, я совершенно не согласен с таким поведением).
Вот что у меня сработало:
container.RegisterType<IParserBuilder, HelpParserBuilder>("HelpParserBuilder");
container.RegisterType<IParserBuilder, SomeOtherParserBuilder>("SomeOtherParserBuilder");
container.RegisterType<IParserSelector, CoalescingParserSelector>();
container.Configure<InjectedMembers>().ConfigureInjectionFor<CoalescingParserSelector>(new InjectionConstructor(container.ResolveAll<IParserBuilder>()));
Чтобы разрешить один экземпляр, вам также необходимо добавить регистрацию по умолчанию, в противном случае вызов Resolve<T>()
не удастся.
Этот код делает регистрацию по умолчанию для включения одного разрешения:
container.RegisterType<IParserBuilder, HelpParserBuilder>();
IParserBuilder builder = container.Resolve<IParserBuilder>()