2011-01-26 3 views
0

私はデスクトップアプリケーションを作成しました。また、Webアプリケーションとしても機能します。 File()タイプとFileStreamの行にエラーが発生しましたが、これを回避する方法はありますか?File()Webアプリケーション内のFileStream

答えて

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 
} 

お知らせを注入メタタグを頼ります。これは、あなたのDependency Injection(DI)システムが、設定(Airアプリケーション用のFileStuffServiceまたはWebアプリケーション用のHTTPStuffService)に基づいて依存関係をプッシュする場所です。パセリとRobotLegsは、[注入する】もちろんfiex-IOC用途[IocBind]

を使用し、あなたはあなただけの直接パラメータを注入う... DIコンテナなしで行くことができます。

しかし、実際には非常にシンプルなパターンです。

+0

はい、それは私が言及したものです! –

+0

ありがとう、それはまさに私が必要なものです – noize

2

File()クラスはAIRアプリケーションでのみ使用できます。そのため、エラーが発生します。

これは、私はそれを行うだろうかです:

  1. あなたはプラットフォームに依存するコードを分離し、別のライブラリに配置する必要があります。
  2. プラットフォームが別の独立したライブラリにある必要があるものと同じように動作するその他のコード。
  3. 単純なラッパーになる2つのプロジェクトを作成します。共通コードにのみ結合されたFlexプロジェクト。共通およびプラットフォームに依存するコードの両方に結合されたAIRプロジェクト。

あなたは、おそらく

+0

+1私はクロスプラットフォームのアプリケーションで 'File'を使ってサービスにすることを考えています。 'IGetTheStuffService'か何か。 Parsley、RobotLegs、またはflex-iocのようなDependency Injectionシステムを使用して、実行時に適切なサービスを配線することを検討してください。 –

関連する問題