パーザライブラリは、パースするデータがどこに由来するかには依存しないように実装できます。このような場合何かのために:
今
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();
}
}
どちらの方法でも、ライブラリはお互いを知る必要はありません。クライアントプログラムのみが両方の参照を必要とします。ライブラリの参照は複数の方法で行うことができます。一番簡単なのは、ライブラリプロジェクトとクライアントプログラムの両方を一つのソリューションにまとめることです。クライアントプロジェクトで、プロジェクトへの参照をライブラリに追加します。
DiskParsersライブラリからIOライブラリへの参照を追加しますか?または、ライブラリをデカップリングするためにインターフェイスを使用しますか? –
DTOまたはインターフェイスのみを含む別のライブラリを追加します。具体的なコードなしでは答えにくい。 – CodeCaster
@DStanleyだから私のexeの親ディレクトリにdllをコピーする必要がありますか? – jisuskraist