응용 프로그램 용 플러그인 시스템을 구현하려고하는데 동적으로로드 된 SWF 파일을 가져 오는 데 악영향을 끼치 지 않으면 추가 SWF 파일을로드합니다.Flex에서 플러그인 만들기 - 중첩 된 SWF 파일로드
그것은 이런 식입니다 :
- 기본 응용 프로그램 쉘로드 ...
- --------- + 응용 프로그램로드 ...
- ------ 나는 응용 프로그램을 얻을 수 없다 내가 수도로 ----------- + 플러그인 (들)
내가 2
그러나 응용 프로그램 번호를로드하는 응용 프로그램 # 1을 받고 아무 문제가 시도 로드 할 # 2 stantiate # 3
나는 ModuleManager를 사용하여 다양한 순열을 시도했지만 이것이 가장 가까운 것이다. onLoadComplete 메서드가 호출되면 SWF가로드 된 것을 볼 수 있지만 팩토리는 항상 NULL을 반환합니다.
흥미로운 점은 자체 애플리케이션에서이를 추출 할 때 제대로 작동한다는 것입니다. 이 문제는 동적으로로드 된 SWF에서 플러그인을로드한다는 사실에 의해 발생합니다.
나는 이것이 ApplicationDomain
으로 인한 것이라고 생각하지만, 머리 또는 꼬리를 만들 수 없습니다. currentDomain
, new ApplicationDomain(Application.currentDomain)
및 new ApplicationDomain()
을 지정하지 않고 시도했습니다.
또한 본질적으로 우리는 그들이 무엇을 포함 할 지 미리 알 수 없으므로 두 응용 프로그램에서 Foo 클래스에 대한 참조를 참조 할 수 없다는 점에 유의해야합니다.
주위에, 이것은 꽤 알려진 문제인 것 같지만 아직 (명확한) 해결책을 찾지 못했습니다. joshtynjala @
.
.
.
assetModule = ModuleManager.getModule("Foo.swf");
assetModule.addEventListener(ModuleEvent.READY, onLoadComplete);
assetModule.addEventListener(ModuleEvent.ERROR, onLoadError);
assetModule.load();
.
.
.
private var _pluginInstance:Plugin;
private function onLoadComplete(event:Event):void
{
trace("module loaded");
_pluginInstance = assetModule.factory.create() as Plugin;
if(_pluginInstance)
_pluginInstance.startup();
else
Alert.show("unable to instantiate module");
}
private function onLoadError(event:Event):void
{
Alert.show("error");
}
My Plugin looks like this:
package
{
import mx.collections.ArrayCollection;
import mx.modules.ModuleBase;
public class Plugin extends ModuleBase
public function startup():void
{
}
.
.
.
}
및
package
{
import Plugin;
import mx.modules.ModuleBase;
public class Foo extends Plugin
{
public function Foo()
{
trace("foo constructor invoked");
}
override public function startup():void
{
trace("foo started");
}
.
.
.
}
나는 오랫동안 응용 프로그램 도메인으로 근무 한 적이없는, 그래서 나는이 질문에 대한 완전한 해답을 제공 할 수 없습니다,하지만 문제가 여기에 무슨 일이 일어나고 있음을 알 수 있습니다 : assetModule.factory.create() 플러그인으로; 모듈의 Plugin 클래스와 기본 앱의 Plugin 클래스가 VM에 관한 한 동일하지 않습니다. Plugin! = Plugin이므로 "Plugin"으로 변환하면 null이 반환됩니다. (Object 또는 뭔가로 캐스팅하는 것 이외의)이를 해결하는 방법은 기억이 나지 않지만 ApplicationDomain 클래스를 조사하는 올바른 길을 걷고 있습니다. – joshtynjala