2009-05-17 90 views
6

當使用自動登記溫莎城堡我看到人們做這樣Castle Windsor Fluent註冊 - Pick()做什麼?

_container.Register(
    AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) 
    .WithService.FirstInterface()); 

事情對於我的生活,我不能找出匹克()方法做什麼我也不能找到任何文檔。任何人都可以解釋給我嗎?

回答

9

Pick(IEnumerable<Type>)is a synonym forFrom(IEnumerable<Type>),即它選擇指定的類型作爲註冊目標。

AllTypes.Pick()is the same asAllTypes.Of<object>(),所以它有效地選擇所有類型。

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())將在執行組件選擇所有類型(然後可以過濾,當然)

像往常一樣,看看所述fluent API wiki和/或​​獲得更多信息。

+1

Mausch - 你有沒有想過要爲城堡文檔提供流暢的界面?這不是你回答的第一個問題。 – 2009-05-18 07:11:14

+0

我來試一試 – 2009-05-18 14:57:47

2

這是流暢的API中的起點,用於選擇哪些類型將自動註冊到容器中。

Container.Register(
     AllTypes.Pick() 
     .FromAssemblyNamed("MyAssembly") 
     .If(t => t.Name.EndsWith("ABC")) 
     .Configure(c => c.LifeStyle.Is(LifestyleType.Transient)) 
     .WithService.Select(i => typeof(I)) 
    ); 

在這個例子中所有類型從採摘MyAssembly的與結尾的名字「ABC」將被加入到容器短暫性的生活方式I型的例子來自this question的服務。

這是一種內部DSL形式的聲明性方法。使用這種類型的API,可以使用方法對稍後將要執行的行爲進行配置。爲了達到這個目的,這些方法會讓建造者通過配置步驟來引導,而實際的工作是在最後完成的。

相關問題