Замок Виндзор: Могу ли я получить все экземпляры типа? - PullRequest
2 голосов
/ 24 марта 2011

Я регистрирую кучу реализаций ITask в Windsor, используя Named для их разделения.Есть ли способ, которым класс может запросить все экземпляры ITask?

Ответы [ 2 ]

3 голосов
/ 25 марта 2011

Виндзор может делать то, что вы запрашиваете через средство разрешения зависимостей CollectionResolver:

var container = new WindsorContainer();
var kernel = container.Kernel;
kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));

Теперь, если вы зарегистрируете несколько реализаций ITask, у вашего бегуна задач может быть ctor, подобный этому:

public TaskRunner(IEnumerable<ITask> tasks)
{
    // ...
}

что ты хочешь, верно?

0 голосов
/ 24 марта 2011

Да,

container.ResolveAll<ITask>()

Этот пост в блоге подробно объясняет, как сделать это в невежественном виде контейнера:

10 Продвинутых Виндзорских Трюков - 3. Как разрешить массивы

Аналогично другому ответу.

...