2009-07-19 3 views
1

Je reçois cette erreurPourquoi l'injection de dépendance échoue-t-elle dans mon objet usine CF?

L'élément INSTANCE n'est pas défini dans VARIABLES.

Je ne vois pas la raison de l'erreur!

Ceci est mon usine

<cfcomponent output="true" displayname="ObjectFactory"> 

<cffunction name="init" access="public" output="true" returntype="ObjectFactory"> 
    <cfset variables.instance = structNew() /> 
    <cfreturn this /> 
</cffunction> 

<cffunction name="createObj" access="public" output="false" returntype="any"> 
    <cfargument name="objName" type="string" required="true" /> 
    <cfswitch expression="#arguments.objName#"> 
    <cfcase value="abstractCollection"> 
    <cfreturn createObject('component',"AbstractCollection").init() /> 
    <cfbreak /> 
    </cfcase> 
    <cfcase value="assignmentCollection"> 
    <cfreturn createObject('component',"AssignmentCollection").init() /> 
    <cfbreak /> 
    </cfcase> 
    <cfcase value="salesmanBean"> 
    <cfreturn createObject('component',"SalesmanBean").init(
    salesmanHasThisDecorations = this.getInstance("assignmentCollection")) /> 
    <cfbreak /> 
    </cfcase> 
    </cfswitch> 
</cffunction> 

<cffunction name="getInstance" access="public" output="false" returntype="any"> 
    <cfargument name="objName" type="string" required="true" /> 
<!--- Error occurs in the line below ---> 
    <cfif not structKeyExists(variables.instance, arguments.objName)> 
    <cfset variables.instance[arguments.objName] = this.createObj(arguments.objName) /> 
    </cfif> 
    <cfreturn variables.instance[arguments.objName] /> 
</cffunction> 
</cfcomponent> 

Répondre

4

initialisation Assurez-vous que vous appelez() lorsque vous instancier ObjectFactory:

<cfset objectFactory = CreateObject("component","ObjectFactory").init()> 

Pour votre information, init() et <cfcomponent> devraient avoir output='false'

Pour votre information, vous devriez appelez votre propre fonction sans "ceci", parce que si pour une raison quelconque la fonction est déclarée plus tard comme privée, elle a gagné ne le trouve pas dans 'cette' portée.

0

Acceptez que vous n'appeliez probablement pas .init() donc ne créez pas la variable avant d'y accéder.

Vous pouvez également vouloir initialiser (créer) les variables VARIABLES délimitées en dehors de init(). Le init() devrait être plus utilisé pour transmettre des valeurs à votre CFC-scope interne (portée VARIABLES) que pour créer des variables à l'intérieur de celui-ci.

<cfcomponent displayname="ObjectFactory"> 
<cfset variables.instance = structNew() /> 

<cffunction name="init" access="public" returntype="ObjectFactory"> 
    <cfargument name="name" required="yes" type="string"> 
    <cfset variables.instance.name = arguments.name> 
    <cfreturn this /> 
</cffunction> 

... 
+0

i a résolu en faisant ceci: mrt181

Questions connexes