Quindi, dato che ho un istanza di questo componente:Come determinare il contesto in cui si trova un oggetto ColdFusion?
foo.cfc
<cfcomponent>
<cffunction name="locateMe">
<cfreturn "I don't know where I live!">
</cffunction>
</cfcomponent>
E, questo altro componente, fooParent.cfc:
<cfcomponent>
<cfset this.foo = createObject("component", "foo")>
</cfcomponent>
Diciamo che creare istanze di "foo" in diversi modi:
<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>
Come previsto, th è uscite:
I don't know where I live!
I don't know where I live!
I don't know where I live!
Quello che voglio sapere è, cosa posso possibilmente fare all'interno foo.cfc che mi dirà qualcosa (qualsiasi cosa!) sul contesto in cui viene invocato? Dal momento che tutto alla fine vive in (almeno) un ambito di qualche tipo, e tutti gli ambiti sono una specie di oggetto, quello che sto dicendo è che mi piacerebbe davvero un modo per determinare l'oggetto contenitore, all'interno di un dato oggetto istanziato. Infine, un modo di costruire foo.cfc modo che qualcosa di simile potrebbe essere la mia uscita, dal mio frammento di esempio precedente:
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!
Quando ciascuno di questi valori potrebbe essere determinato esaminando il risultato di passare getMetaData
reale contenente riferimento all'oggetto.
Aggiornamento Come suggerito da Micah nei commenti, ho aggiunto il tag "Java" a questo, poiché sospetto che potrebbe essere corretto in quanto la soluzione potrebbe risiedere nell'uso di Java per l'introspezione.
Aggiornamento
Piuttosto che lasciare questo come quello che sembra essere una discussione puramente accademica, mi permetta di spiegare il motivo per cui ho bisogno di questo.
sto usando CFWheels ORM con include tornare riferimenti ai miei dati in questo modo:
var user = model("User").findOne(where="id=123", include="AuthSource", returnAs="object");
questo tornerà a me un oggetto che io posso fare riferimento in questo 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
Ora, all'interno del mio metodo "AuthSource.authenticate", vorrei conoscere l'oggetto "Utente" in cui sono contenuto. In caso contrario, io finisco per dover chiamare la funzione come questo, invece:
user.AuthSource.authenticate(user, password) // note the redundancy in the use of "user"
dovrei essere in grado di fare affidamento sul fatto che sto chiamando il metodo sul modello AuthSource attraverso l'oggetto d'uso e in realtà leggere da quell'oggetto all'interno di quel metodo.
Ottima domanda. Mi chiedo se JAVA potrebbe avere alcune funzioni di introspezione per determinare questo genere di cose. Forse potresti ampliare la tua domanda aggiungendo un tag java. – Micah
Perché il downvote casuale su questa domanda? Che strano ... –