2011-02-14 22 views
2

使用溫莎2.5.2以下工作:溫莎Func鍵<T>財產注射

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

要延遲伊巴爾的創作,這也適用:

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

但是,如果我組合屬性注射Func<T>,以下結果爲空引用:

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

我該如何讓溫莎注射Func<IBar>

回答

2

這是一個很好的問題。我很高興你問。

對於隱性登記Func小號溫莎看屬性,認爲它是可選的,它只是不打擾試圖得到它,因爲...好 - 這是可選的,所以你一定是快樂的不具有依賴性填充。

把它填充,你要麼註冊工廠明確

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

或您標記(使用Require方法上ComponentModel)本所要求的依賴性是通過IComponentModelConstructionContributor

+1

「沒有按可能做得最好」因爲......好 - 它是可選的「 - 在這種情況下,爲什麼它會解決IBar?這似乎很不一致。 – 2011-02-14 08:36:29