渡された名前に基づいてサブクラスをロードするクラスを作成しました。この関数はgetDefinitionByNameを使用し、クラスタイプを取得してインスタンス化し、クラスがこのメソッドを所有するクラスのサブタイプである場合はそれを返します。サブタイプは、コントロールのインスタンス化を簡素化するために、基本クラスを拡張するすべてのmxmlファイルです。
ただし、完全修飾名を渡すと、単体テストでは機能しますが、アプリケーションのコンテキストで実行すると失敗します。getDefinitionByNameに、実行コンテキストごとに異なる動作をさせる落とし穴はありますか?修飾名でクラスをロードする簡単な方法はありますか?
static public function loadDisplay(className:String, extendedClassName:String = null):FeatureDisplay
{
try
{
trace("Loading", className);
var cls:Class = getDefinitionByName(className) as Class;
var display:FeatureDisplay = new cls() as FeatureDisplay;
if(display)
{
return display;
}
else
{
trace(className, "is not a subclass of FeatureDisplay");
return null;
}
}
catch(error:Error)
{
trace("Error loading", className);
trace("Error:", error.message);
}
return null;
}