Windsor Func <t>属性注入</t>

时间:2011-02-14 06:03:05

标签: castle-windsor ioc-container property-injection

使用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; }
}

如何让Windsor注入Func<IBar>

1 个答案:

答案 0 :(得分:2)

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

对于隐式注册Func s Windsor正在查看该属性,看到它是可选的,它只是不打算尝试得到它,因为......好吧 - 它是可选的,所以你肯定不高兴填充了依赖关系。

要填充它,您可以明确注册工厂

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

或者您根据需要标记了依赖关系(使用ComponentModel方法在Require上),这可能最好通过IComponentModelConstructionContributor

完成