package Ġnz . co . j ed sim son . lg p . core . environment Ċ Ċ /** Ċ Ġ* ĠDefines Ġa Ġprovider Ġof Ġ[ T Component ] Ġinstances . Ċ Ġ*/ Ċ interface ĠComponent Provider < out ĠT Component > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcomponent Ġthat Ġthis Ġprovider Ġis Ġresponsible Ġfor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcomponent : ĠT Component Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġimplementation Ġof Ġ[ Component Provider ] Ġthat Ġwill Ġcache Ġthe Ġcomponent Ġafter Ġinitial isation . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT Component ĠThe Ġtype Ġof Ġthe Ġcomponent Ġthat Ġthis Ġprovider Ġis Ġresponsible Ġfor . Ċ Ġ* Ġ@ property Ġcomponent Name ĠThe Ġname Ġof Ġthe Ġcomponent . Ċ Ġ* Ġ@ property Ġcomponent Initial isation Function ĠA Ġfunction Ġthat Ġwill Ġinitialise Ġthe Ġcomponent . Ċ Ġ* Ġ@ constructor ĠCreates Ġa Ġnew Ġ[ Memo ized Component Provider ] Ġfor Ġcomponents Ġwith Ġthe Ġgiven Ġ[ component Name ], Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhich Ġcan Ġbe Ġcreated Ġusing Ġthe Ġgiven Ġ[ component Initial isation Function ]. Ċ Ġ*/ Ċ class ĠM emo ized Component Provider < out ĠT Component >( ĊĠĠĠ Ġprivate Ġval Ġcomponent Name : ĠString , ĊĠĠĠ Ġprivate Ġval Ġcomponent Initial isation Function : Ġ() Ġ-> ĠT Component Ċ ) Ġ: ĠComponent Provider < T Component > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcomponent Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Initial isation Function () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( cause : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠComponent Load Exception (" Failed Ġto Ġload Ġa Ġ$ component Name Ġcomponent .", Ġcause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }