2011-01-26 28 views

回答

2

捎带上@Florian F公司正确的响应实现之间切换,这里是你将如何实现它:

创建抽象的接口中的文件访问

public interface IGetTheStuffService { 
    function getSomeTofu():Tofu; 
} 

创建一个基于文件的IMPL ementation

public class FileStuffService implements IGetTheStuffService { 
    public function getSomeTofu():Tofu { 
     // File-based implementation 
    } 
} 

和基于HTTP的实现

public class HTTPStuffService implements IGetTheStuffService { 
    public function getSomeTofu():Tofu { 
     // HTTP-based implementation 
    } 
} 

在你的消费者,依靠IGetTheStuffService

[Inject] public var tofuService:IGetTheStuffService; 

public function doSomeStuff():void { 
    var tofu:Tofu = tofuService.getSomeTofu(); 
    // act on the tofu 
} 

通知的进样元标记。这就是您的依赖注入(DI)系统根据配置(FileStuffService for Air应用程序或HTTPStuffService for Web应用程序)推送您的依赖关系的位置。香菜和Robotlegs的使用[进样]其中FIEX-IOC用途[IocBind]

当然,你可以去无DI容器......你只需直接注入参数。

但是你明白了......实际上是一个非常简单的模式。

+0

是的,这就是我所指的! – 2011-01-26 14:36:09

2

File()类仅适用于AIR应用程序,这就是为什么会出现此错误。

这是我会怎么做:

  1. 您需要隔离平台相关的代码,并放在一个单独的图书馆。
  2. 无论平台应该在另一个独立库中,其他代码的工作方式都是相同的。
  3. 创建2个简单的包装项目。一个仅与公共代码耦合的Flex项目。与常用和平台相关的代码耦合的AIR项目。

然后您就可能需要在一段时间内使用到的接口的基于特定平台

+0

+1我会考虑任何在跨平台应用程序中使用“File”作为服务的东西。 `IGetTheStuffService`什么的。考虑使用像Parsley,RobotLegs或flex-ioc这样的依赖注入系统在运行时连接正确的服务。 – 2011-01-26 11:48:38

相关问题