2009-07-19 11 views
1

このエラーが発生するなぜ私のCFファクトリオブジェクトで依存性注入が失敗しますか?

要素INSTANCEは可変では定義されていません。

エラーの原因は表示されません。

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

FYI、init()<cfcomponent>はFYI output='false'

を、あなたがすべきである持っている必要があります。

は、これはあなたがObjectFactoryのインスタンス化時には、init()を呼び出していることを確認してください私の工場

<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> 

答えて

4

ですなんらかの理由でこの関数が後にprivateとして宣言された場合、 "this。"を除いてあなた自身の関数を呼び出します「this」の範囲でそれを見つけることはできません。

0

.init()を呼び出さない可能性が高いので、変数にアクセスする前に変数を作成しないことに同意します。

また、init()以外の変数VARIABLESを初期化(作成)することもできます。 init()は内部CFCスコープ(VARIABLESスコープ)に値を渡すために、変数を変数内に作成するよりも多く使う必要があります。

<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

このようにして解決しました。 mrt181

関連する問題