2

使用 Windsor 2.5.2,以下工作:

public class Foo
{
    public IBar Bar { get; set; }
}

要延迟创建 IBar,这也可以:

public class Foo
{
    public Foo(Func<IBar> barFactory)
    { 
    }
}

但是,如果我将属性注入与 结合使用Func<T>,则会导致空引用:

public class Foo
{
    public Func<IBar> Bar { get; set; }
}

我怎样才能让温莎注入Func<IBar>

4

1 回答 1

2

这是一个很好的问题,保罗。我很高兴你问。

对于隐式注册Func的 s Windsor 正在查看该属性,认为它是可选的,并且它只是不费心尝试获取它,因为......好吧 - 它是可选的,所以你肯定很高兴没有填充依赖项。

要填充它,您可以显式注册工厂

container.Register(Component.For<Func<IBar>>().AsFactory().Lifestyle.Transient);

或者您将依赖项标记为必需(在ComponentModel使用Require方法上),这可能最好通过IComponentModelConstructionContributor

于 2011-02-14T07:48:21.393 回答