Aquí está mi problema:Custom Guice Scope, o un mejor enfoque?
Primero es importante saber que estoy escribiendo una simulación. Esta es una aplicación independiente y tiene un único subproceso. Tengo esencialmente dos clases de objetos que tienen diferentes requisitos de alcance.
clases que se deben utilizar como singletons lo largo de toda la simulación. Una instancia de Random, como un ejemplo.
Grupos de clases que se crean juntas, y dentro del grupo, cada instancia se debe tratar como Singleton. Por ejemplo, digamos
RootObject
es la clase de nivel superior, y tiene una dependencia aClassA
yClassB
, ambos tienen una dependencia aClassD
. Para cualquierRootObject
dado, sus dos dependencias (ClassA
yClassB
) deberían depender de la misma instancia deClassD
. Sin embargo, las instancias deClassD
no se deben compartir en diferentes instancias deRootObject
.
Espero que tenga sentido. Puedo pensar en dos enfoques para esto. Una es marcar todos los objetos inyectados como Singletons, crear el inyector raíz y derivar un inyector hijo cada vez que necesito crear una nueva instancia de RootObject
. Luego, las instancias de RootObject
y todas sus dependencias se crean como Singletons, pero esa información de scoping se descarta la próxima vez que vaya a crear otra RootObject
.
El segundo enfoque es implementar algún tipo de ámbito personalizado.
La documentación de Guice da consejos contradictorios ... Por un lado, dice que debe tener un solo inyector, y que idealmente se llama una vez para crear una clase de nivel superior. Por otro lado, dice mantenerse alejado de los ámbitos personalizados.
tengo una idea de que la inyección @Assisted podría ser utilizado aquí, pero estoy teniendo problemas para ver exactamente cómo se debe utilizar ... – Rich
@ Josh: ¿Dónde dice la docu para mantenerse alejado de los ámbitos? –
@ A.H., Http://code.google.com/p/google-guice/wiki/CustomScopes - primera línea. "En general, se recomienda que los usuarios no escriban sus propios ámbitos personalizados; los ámbitos integrados deberían ser suficientes para la mayoría de las aplicaciones". He descubierto que el primer enfoque funciona muy bien, creando inyectores para niños según sea necesario. Solo debemos tener cuidado de que los "singletons por grupo" no se unan accidentalmente en el inyector padre, pero eso es bastante fácil de verificar. – Josh