2016-11-28 10 views
1

私はC#アプリケーションで作業しています。他のプロジェクトのメソッドを変更する

私はマトリックスを生成するためにライブラリを使用しています。デバッグのために私はメソッドWriteToFileを作成しました。しかし、このライブラリはPC上のアプリケーションに使用され、他のものはアンドロイド(おそらくiOS後で)に使用されます。ですから、私はこのライブラリでIOを使いたくありません。

私の解決策があります:

  • ProjectLibrary
  • ProjectPC
  • ProjectAndroid

実際に行列

namespace ProjectLibrary 
{ 
    public class Matrix 
    { 
     public void Generate() 
     { 
      //Generate Step 1 

      //for the debug I want to use this method sometime 
      WriteToFile(); 

      //Generate Step 2 
     } 

     public void WriteToFile() 
     { 
      //TODO 
      //if ProjectPC write on PC 
      //if ProjectAndroid write on phone 
     } 
    } 
} 
ためProjectLibraryでのクラスがあります

私の質問は次のとおりです:方法WriteToFileはどのように作成できますか?このメソッドは、私のプロジェクトProjectLibraryで呼び出す必要がありますが、ProjectPCProjectAndroidに応じて同じではありません。

+0

Mvx.Resolve<IFileWriter>().Generate(); 

をあなたはそれを持つことができます個人的に書かれたイオン( 'ProjectPC'と' ProjectAndroid')をオーバーライドメソッド –

+0

継承した新しいクラスを作成せずにクラス内でオーバーライドメソッドを宣言することは可能ですか? –

+2

[戦略パターン](http://www.dofactory.com/net/strategy-design-pattern)をご覧ください –

答えて

4

インターフェイスとdepedency注射を使用してください!その後、あなたはIFileWriterから継承するクラスを作成し、Windowsのプロジェクトで

public class Matrix 
    { 
     private IFileWriter _writer; 

     public Matrix(IFileWriter writer) 
     { 
      _writer = writer; 
     } 

     public void Generate() 
     { 
      //Generate Step 1 

      //for the debug I want to use this method sometime 
      _writer.WriteToFile(); 

      //Generate Step 2 
     } 


    } 

public interface IFileWriter 
{ 
    void WriteToFile(); 
} 

が続いて依存関係を追加するためにあなたのMatrixクラスを変更します。プロジェクトライブラリで

は、インターフェイスを作成

public class WindowsFileWriter : IFileWriter 
{ 
    public void WriteToFile() 
    { 
     //Your windows code 
    } 
} 

あなたはAndroidプロジェクトで同じことを行います:

public class AndroidFileWriter : IFileWriter 
{ 
    public void WriteToFile() 
    { 
     //Your android code 
    } 
} 

そして、あなたは、Androidでの行列クラスを必要とするとき、あなたはちょうどこのようにそれを呼び出す必要があります:私の視点から(

WindowsFileWriter myWindowsFileWriter = new WindowsFileWriter(); 
Matrix myMatrix = new Matrix(myWindowsFileWriter); 
myMatrix.Generate(); 

さらに良い:

AndroidFileWriter myAndroidFileWriter = new AndroidFileWriter(); 
Matrix myMatrix = new Matrix(myAndroidFileWriter); 
myMatrix.Generate(); 

とWindowsでIFileWriterのIOC実装に登録できるMvvmフレームワークを使用している場合は、MvvmCrossと例えば

これはあなたを与えるだろう。そして、

Mvx.Register<IFileWriter, AndroidFileWriter>(); //in your android project start 

Mvx.Register<IFileWriter, WindowsFileWriter>(); //in your windows project start 

、呼び出し:あなたのコアプロジェクト

+0

良い作品、詳細な答えをありがとう –

関連する問題