Por lo tanto, teniendo en cuenta que tengo una instancia de este componente:¿Cómo determino el contexto en el que reside un objeto ColdFusion?
foo.cfc
<cfcomponent>
<cffunction name="locateMe">
<cfreturn "I don't know where I live!">
</cffunction>
</cfcomponent>
Y, este otro componente, fooParent.cfc:
<cfcomponent>
<cfset this.foo = createObject("component", "foo")>
</cfcomponent>
Digamos que crear instancias de "foo" de algunas maneras diferentes:
<cfset myStruct = {}>
<cfset myStruct.foo = createObject("component", "foo")>
<cfset myFoo = createObject("component", "foo")>
<cfset myFooParent = createObject("component", "fooParent")>
<cfoutput>
#myStruct.foo.locateMe()#<br>
#myFoo.locateMe()#<br>
#myFooParent.foo.locateMe()#<br>
</cfoutput>
Como esperaba, th es salidas:
I don't know where I live!
I don't know where I live!
I don't know where I live!
Lo que yo quiero saber es, ¿qué puedo hacer posiblemente dentro foo.cfc que me diga algo (cualquier cosa) sobre el contexto en el que se invoca? Como todo finalmente vive en (al menos) ámbito de algún tipo, y todos los ámbitos son un tipo de objeto, lo que estoy diciendo es que me gustaría de alguna manera determinar el objeto que contiene, desde dentro de un objeto instanciado dado. En última instancia, una cierta manera de construir foo.cfc para que algo como esto podría ser mi salida, desde mi fragmento de ejemplo anterior:
I live within a "class coldfusion.runtime.Struct" instance!
I live within a "class coldfusion.runtime.VariableScope" instance!
I live within a "component cfjunk.fooParent" instance!
donde cada uno de esos valores se puede determinar examinando el resultado de pasar la getMetaData
real que contiene referencia de objeto
Actualización Según lo sugerido por Micah en los comentarios, he agregado la etiqueta "Java" a esto, ya que sospecho que podría estar en lo cierto ya que la solución puede estar en el uso de Java para la introspección.
actualización
En lugar de dejar esto como lo que parece ser una discusión puramente académica, permítanme explicar por qué necesito esto.
estoy usando CFWheels ORM con incluye referencias a volver a mis datos, así:
var user = model("User").findOne(where="id=123", include="AuthSource", returnAs="object");
Se volverá a mí un objeto que pueda hacer referencia a este modo:
user.id // property of the "User" model
user.reset() // method on the "User" model
user.AuthSource.id // property of the "AuthSource" model
user.AuthSource.authenticate(password) // method on the "AuthSource" model
Ahora, dentro de mi método "AuthSource.authenticate", me gustaría saber sobre el objeto "Usuario" en el que estoy dentro. De lo contrario, el resultado final será tener que llamar a la función como ésta, en su lugar:
user.AuthSource.authenticate(user, password) // note the redundancy in the use of "user"
yo debería ser capaz de confiar en el hecho de que estoy llamando al método en el modelo AuthSource a través del objeto de usuario y leer realmente desde ese objeto desde dentro de ese método.
Una gran pregunta. Me pregunto si JAVA podría tener algunas funciones de introspección para determinar este tipo de cosas. Tal vez podría ampliar su pregunta agregando una etiqueta java. – Micah
¿Por qué downvote al azar en esta pregunta? Qué extraño ... –