我想使用 Parsley 框架,并且我想使用 GraniteDS 进行远程处理。从 2.1 开始,GraniteDS 从您的 Java 代码生成 AS3 服务类作为本地代理,我想在 Parsley 中使用这些类。
我可以用 Parsley 成功注入服务类,但是当我调用它们的任何方法时,我得到一个空对象错误
at org.granite.tide::Component/http://www.adobe.com/2006/actionscript/flash/proxy::callProperty()[C:\workspace_\graniteds\as3\framework\org\granite\tide\Component.as:172]
at library::BookServiceBase/get()[C:\Documents and Settings\MedLineTec\Adobe Flash Builder 4\library\src\library\BookServiceBase.as:36]
这可能是因为 Parsley 正在创建服务类的实例,而实际上并未将相关“上下文”注入它们以执行 GraniteDS 远程处理。我需要弄清楚如何将 GraniteDS 上下文提供给 parsley 实例化的服务类。我在欧芹论坛上看到一个帖子,有人推荐:
<parsley:ContextBuilder>
<parsley:FlexConfig type="{UserManagerConfig}"/>
<parsley:RuntimeConfig instances="{[tideContext]}" />
</parsley:ContextBuilder>
...
[Bindable]
private var tideContext:Context = Spring.getInstance().getSpringContext();
但这对我不起作用。我熟悉 GraniteDS,但不熟悉 Parsley,所以也许这是解决方案,但正确应用它超出了我的想象。
如果有人将它与另一个框架(如 Swiz 或 Spring ActionScript)一起使用,那么也请传递该解决方案,因为它可能非常相似。
更新:我通过阅读 Granite 源代码发现,在我用 Parsley 注入服务(例如 bookService)之后,如果我运行
private var tideContext:Context = Spring.getInstance().getSpringContext();
bookService.meta_init("bookService", tideContext);
然后我可以成功使用该服务。所以我想我只需要知道如何使用我在 Parsley 中声明的所有服务以一种自动的方式执行此操作。