2009-05-17 16 views
6

Cuando se utiliza un registro automático con el castillo de Windsor veo a gente haciendo cosas comoCastle Windsor Fluent Registration - ¿Qué hace Pick()?

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

Porque la vida de mí no puedo averiguar lo que hace el método de recogida() ni puedo encontrar ninguna documentación. ¿Puede alguien explicármelo?

Respuesta

9

Pick(IEnumerable<Type>)is a synonym forFrom(IEnumerable<Type>), es decir, selecciona los tipos especificados como destinos de registro.

AllTypes.Pick()is the same asAllTypes.Of<object>(), por lo que efectivamente selecciona todos los tipos.

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) seleccionará todos los tipos en el conjunto de la ejecución (a continuación, puede filtrar, por supuesto)

Como de costumbre, echar un vistazo a la fluent API wiki y/o test case para más información.

+1

Mausch: ¿has pensado en contribuir con los documentos de Castle sobre la interferencia fluida? No es la primera pregunta como esta que respondes. –

+0

Lo intentaré –

2

Es el punto de partida en esta API fluida para elegir qué tipos se registrarán automáticamente en el contenedor.

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

En este ejemplo todos los tipos recogidos de MyAssembly con nombre que termina con "ABC" se añadirá a la recipiente con el estilo de vida transitoria como servicios de tipo I. El ejemplo proviene de this question.

Este es un enfoque declarativo en forma de DSL interno. Con este tipo de API, los métodos se usan para configurar el comportamiento que se ejecutará más adelante. Para lograr esto, los métodos devuelven a los constructores guiar a través de los pasos de configuración, mientras que el trabajo real se realiza al final.

+0

El problema es que en el ejemplo anterior parecería que en lugar de utilizar AllTypes.Pick(). FromAssemblyNamed (...). Si (...) puede hacer lo más corto y más estandarizado AllTypes.FromAssemblyNamed (...). Dónde (..) –

Cuestiones relacionadas