Замок Виндзор не может внедрить массив типов интерфейса - PullRequest
12 голосов
/ 29 июня 2009

У меня есть класс, который принимает массив интерфейсов в конструкторе:

public class Foo<T1, T2> : IFoo<T1, T2>
{
    public Foo(IBar[] bars)
    {
        ...
    }
}

Моя регистрация контейнера выглядит следующим образом:

container.Register(AllTypes.Pick().FromAssemblyNamed("...")
                    .WithService.FirstInterface());
container.AddComponent("foo", typeof(IFoo<,>), typeof(Foo<,>));

У меня есть несколько реализаций IBar, и контейнер может их точно определить, так как вызов ServiceLocator.Current.GetAllInstances<IBar>() работает нормально.

Однако, если я пытаюсь получить экземпляр IFoo, он выдает исключение, говорящее, что он не может удовлетворить deoendency ... "который не был зарегистрирован". Если я изменю конструктор на один экземпляр IBar, он будет работать нормально.

Есть идеи?

1 Ответ

23 голосов
/ 29 июня 2009

Добавьте ArrayResolver:

container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...