Castle Windsor can't inject an array of interface types

妖精的绣舞 提交于 2019-11-27 15:05:33

问题


I have a class that takes an array of interfaces in the constructor:

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

My container registration looks as follows:

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

I have several implementations of IBar, and the container can definately locate them, as calling ServiceLocator.Current.GetAllInstances<IBar>() works fine.

However, if I try to get an instance of IFoo, it throws an exception saying it couldn't satisfy the deoendency... "which was not registered".

If I change the constructor to take a single instance of IBar it works fine.

Any ideas?


回答1:


Add the ArrayResolver:

container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel)); 


来源:https://stackoverflow.com/questions/1057977/castle-windsor-cant-inject-an-array-of-interface-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!