2016-04-19 3 views
0

私は現在、新しい概念を学ぶための小さなアプリケーションを開発しています。私は、MBRとディスクとは異なるパーティションを解析するいくつかのクラスを開発しました。C#ライブラリ、別のプロジェクトのタイプのコンストラクタ

私はもっとモジュラー化する考えがありました。 私は、このすべてのメソッドを、データを解析するDiskParsersというライブラリに持っていくことを考えました。 また、ディスクI/Oを実行するネイティブメソッドを呼び出す別のライブラリ。 問題は、コンストラクタに、物理ドライブへの読み書きを処理するディスクIO libに私が書き込んだカスタムタイプのパラメータがあることです。 私のライブラリは、そのタイプが何であるか分かりません。

どうすればこの問題を解決できますか?ジェネリックの使用?ディスクI/Oクラスのインタフェースをパーサーライブラリにバンドルするか?パーサのlibはバイトバッファのみを受け入れ、カスタム型の関係は持たないはずです。

+0

DiskParsersライブラリからIOライブラリへの参照を追加しますか?または、ライブラリをデカップリングするためにインターフェイスを使用しますか? –

+0

DTOまたはインターフェイスのみを含む別のライブラリを追加します。具体的なコードなしでは答えにくい。 – CodeCaster

+0

@DStanleyだから私のexeの親ディレクトリにdllをコピーする必要がありますか? – jisuskraist

答えて

1

パーザライブラリは、パースするデータがどこに由来するかには依存しないように実装できます。このような場合何かのために:

public class MBRParser 
{ 
    public MasterBootRecord Read(Stream stream) 
    { 
     // parsing logic 
    } 

    public MasterBootRecord Read(IMBRReader reader) 
    { 
     // parsing logic 
    } 

} 

public interface IMBRReader 
{ 
    MasterBootRecord Read(); 
} 

、クライアントプログラムはStreamでパーサを提供するために、あなたのI/Oライブラリを取ることができます:

public class Program 
{ 
    public static void Main() 
    { 
     var stream = new IOLibrary.Stream(); 
     var mbrParser = new MBRParser(); 
     var mbr = mbrParser.Read(stream); 
    } 
} 

やクライアントプログラムは、具体的なIMBRReader実装しています

public class NativeMBRReader : IMBRReader 
{ 
    public MasterBootRecord Read() 
    { 
     // native I/O methods to read MBR 
    } 
} 

public class Program 
{ 
    public static void Main() 
    { 
     var mbrReader = new NativeMBRReader(); 
     var mbr = mbrReader.Read(); 
    } 
} 

どちらの方法でも、ライブラリはお互いを知る必要はありません。クライアントプログラムのみが両方の参照を必要とします。ライブラリの参照は複数の方法で行うことができます。一番簡単なのは、ライブラリプロジェクトとクライアントプログラムの両方を一つのソリューションにまとめることです。クライアントプロジェクトで、プロジェクトへの参照をライブラリに追加します。

関連する問題