Guice: Falta información del punto de inyección cuando se usa el reemplazo de DependenyChain obsoleto.

Creado en 26 jul. 2017  ·  7Comentarios  ·  Fuente: google/guice

El ejemplo proporcionado para reemplazar el método de cadena de dependencia obsoleto no proporciona suficiente contexto sobre qué campo o parámetro se está inyectando. Intenté reemplazar el método de la cadena de dependencia, pero lo más preciso que obtuve fue saber qué método / constructor / clase se está inyectando.

Saber qué campo / parámetro se está inyectando permitió a Provider s devolver valores basados ​​en los elementos anotados, sin tener que vincular cada combinación posible.

La solución de la cadena de dependencia se puede encontrar en los siguientes cambios de relaciones públicas: https://github.com/SpongePowered/SpongeCommon/pull/1435/files/1bd19db6f0b2363b8bc72960df0b0947e04cc1e0
Un InjectionPoint se construye a partir de la información en la cadena de dependencia, este objeto solo expone las anotaciones / tipo / tipo de destino del campo / parámetro. También hay un pequeño ejemplo disponible en PR.

Luego estaba buscando una solución diferente para la cadena de dependencia y terminé atrapado en los siguientes cambios:
https://github.com/LanternPowered/LanternServer/commit/f67d3e86af549b7e64c43f5f0de85d6fe5aaf211

No estoy seguro de cuál podría ser la mejor solución para resolver el problema, una opción es no predecir el método getDependencyChain . O similar a la inyección InjectionPoint , ¿podría también hacerse para el Dependency por guice mismo, haciendo innecesario escanear la cadena? Tal vez ustedes puedan encontrar una mejor solución para este problema. Tal vez haya incluso una solución diferente que no he podido encontrar.

Comentario más útil

otro golpe, @lukesandberg - ¿entrada?

Todos 7 comentarios

Voy a darle un golpe a esto, ¿alguna solución conocida? Si no es así, ¿es posible revertir esto?

Odio ser una de esas personas que choca con tanta frecuencia, pero sería genial obtener una respuesta sobre esto: ¿@ dimo414?

@kashike lo siento, me temo que no tengo ninguna información aquí.

DependencyChain quedó obsoleto en la siguiente confirmación: https://github.com/google/guice/commit/99c1047b23af62d17b41bda03947a54f581b21c8
Y una de las razones por las que se eliminó fue por no ser lo suficientemente "popular" y por ser más eficaz al eliminarlo ( A benchmarking experiment* shows that maintaining the dependency stack costs about 10% of guice performance. Anecdotally this feature also isn't very popular, so eliminating it seems reasonable. ). ¿Quizás una solución opt-in sería mejor en lugar de eliminarla?

O tal vez un método para recuperar la cadena de dependencia sin la fuente (reduciría el tamaño de la pila de dependencia interna a la mitad: https://github.com/google/guice/blob/master/core/src/com/google/inject/internal /InternalContext.java#L46).

@lukesandberg - ¿entrada?

otro golpe, @lukesandberg - ¿entrada?

Voy a darle a esto otro empujón: ¿@lukesandberg?

¿Fue útil esta página
0 / 5 - 0 calificaciones