2009-05-17 8 views
6

Wenn die automatische Anmeldung mit Schloss windsor mit Ich sehe Menschen, Dinge wieCastle Windsor Fließende Registrierung - Was macht Pick()?

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

Für das Leben von mir zu tun mir nicht herausfinden kann, was der Pick-() -Methode hat noch ich alle Unterlagen finden kann. Kann mir das jemand erklären?

Antwort

9

Pick(IEnumerable<Type>)is a synonym forFrom(IEnumerable<Type>), d. H. Es wählt die spezifizierten Typen als Registrierungsziele aus.

AllTypes.Pick()is the same asAllTypes.Of<object>(), so dass es effektiv alle Arten auswählt.

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) werden alle Typen in der Ausführung Baugruppe auswählen (Sie können dann auswählen, natürlich)

Wie üblich, werfen Sie einen Blick auf die fluent API wiki und/oder test case für weitere Informationen.

+1

Mausch - Haben Sie darüber nachgedacht, zu Castle docs über fließende Interfce beizutragen? Es ist nicht die erste Frage, auf die du antwortest. –

+0

Ich werde es versuchen –

2

Es ist eine Art Ausgangspunkt in dieser fließenden API für die Auswahl, welche Typen automatisch im Container registriert werden.

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

In diesem Beispiel sind alle Arten von MyAssembly mit dem Namen mit „ABC“ endet gepflückt wird mit Transient Lebensstil als Dienstleistungen von Typ I. Das Beispiel stammt aus this question in den Behälter gegeben werden.

Dies ist ein deklarativer Ansatz in Form von internen DSL. Bei dieser Art von API werden Methoden verwendet, um das Verhalten zu sortieren, das später ausgeführt wird. Um dies zu erreichen, führen die Methoden die Konstrukteure durch die Konfigurationsschritte, während die eigentlichen Arbeiten am Ende ausgeführt werden.

+0

Das Problem ist, dass in dem obigen Beispiel scheint, dass anstelle von AllTypes.Pick(). FromAssemblyNamed (...). Wenn (..) können Sie die kürzere und standardisierte tun AllTypes.FromAssemblyNamed (...) .Wobei (..) –

Verwandte Themen