【问题标题】:Castle Windsor can't inject an array of interface typesCastle Windsor 无法注入一系列接口类型
【发布时间】:2009-06-29 12:13:41
【问题描述】:

我有一个类,它在构造函数中接受一组接口:

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&lt;IBar&gt;() 工作正常。

但是,如果我尝试获取 IFoo 的实例,它会抛出一个异常,说它不能满足 deoendency...“未注册”。

如果我将构造函数更改为采用 IBar 的单个实例,它可以正常工作。

有什么想法吗?

【问题讨论】:

    标签: dependency-injection castle-windsor


    【解决方案1】:

    添加 ArrayResolver:

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

    【讨论】:

    • @Ben:目前还没有,但您可以在 uservoice 上提出建议:castle.uservoice.com: "Add subresolvers via xml config"
    • 或者更好的是 fork 源代码 github.com/castleproject/Castle.InversionOfControl 并实现它;-)
    • 谢谢,这也为我解决了。互联网上似乎到处都是重新发明此类自定义版本的人...
    • 如果我没有注册 WithService 则 ArrayResolver 没有解析数组,但 WithService 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多