2011-01-26 31 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

相關問題