6

En IOC, ¿qué hace ResolveAll? Sé que la respuesta oficial es "Resolver todos los componentes válidos que coincidan con este tipo". ¿Eso significa que devolverá cualquier clase que implemente una interfaz determinada?¿Cuál es la solución? Todos hacen

+0

¿Qué representa el COI en este contexto? –

Respuesta

1

Devolverá todas las clases que fueron registrado para una interfaz determinada.

10

Devolverá todas las clases que se registraron para una interfaz determinada.

... y no están esperando a que se resuelvan las referencias. Esto me mordió hoy!

+0

+1 para la condición importante :) –

+2

No ** exacto ** verdadero. Devolverá los componentes registrados con un servicio determinado y cualquier otro servicio asignable. Por lo tanto, si solicita 'container.ResolveAll ();' también devolverá servicios registrados como 'IControllerWithCache' –

+2

También la condición que mencionó se modificó en la v2.5. En v2.5, Windsor intentará resolver los componentes que están esperando dependencias (si las dependencias se proporcionan en línea o, por ejemplo, diga 'DynamicParameters'). Solo si ese intento falla, ignorará el componente y pasará al siguiente. –

2

Con Unity, ResolveAll resuelve cada asignación registrada para una interfaz excepto para la asignación predeterminada.

por lo que si usted se registró:

container.RegisterType<IInterface, ActualClassOne>(new ContainerControlledLifetimeManager()); 
container.RegisterType<IInterface, ActualClassOne>("Singleton", new ContainerControlledLifetimeManager()); 
container.RegisterType<IInterface, ActualClassOne>("Trans", new TransientLifetimeManager()); 

ResolveAll() sólo le dará un IEnumerable que contiene un resuelto "Singleton" y asignaciones "trans"

+4

¿Por qué diablos hace eso? Esto siempre me ha molestado. #Unity #Fail – RhysC

+0

¿Estímulo sutil para no usar un mapeo sin nombre? – LukeN

+0

Ahem ... la pregunta era sobre Castle-Windsor :) De todos modos, esa es una información bastante importante. ¿Tal vez considerar cortar y pegar a alguna pregunta relacionada con la Unidad? Apuesto a que hay muchos – quetzalcoatl

0

Si tengo:

contenedores. ResolveAll (nuevo {argumento = algo}). Donde (...)

parece que todos los componentes de T se instancian con 'algo' aunque no todos los los defensores llenan la cláusula where ... ¿quién se encarga de liberar estos componentes adicionales?

Cuestiones relacionadas