使用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>
?
答案 0 :(得分:2)
这是一个很好的问题保罗。我很高兴你问。
对于隐式注册Func
s Windsor正在查看该属性,看到它是可选的,它只是不打算尝试得到它,因为......好吧 - 它是可选的,所以你肯定不高兴填充了依赖关系。
要填充它,您可以明确注册工厂
container.Register(Component.For<Func<IBar>>().AsFactory().Lifestyle.Transient);
或者您根据需要标记了依赖关系(使用ComponentModel
方法在Require
上),这可能最好通过IComponentModelConstructionContributor