0

System.Data.SQLiteを参照するC#ライブラリと、ライブラリを使用する実行可能ファイル(2番目のプロジェクト)があります。ライブラリでVisual Studio 2010での参照転送(ライブラリから実行可能ファイルへ)

、私はSystem.Data.SQLiteでクラスを参照する機能(具体的にSQLiteDataReaderクラス)を持っている:

public static IEnumerable<T> SQLiteFetch<T>(Func<SQLiteDataReader, T> formator, string connectionString, string query) 

ライブラリはこの関数を呼び出して実行可能ファイルを適切にコンパイルしますが、ありません。

これはビルド時にエラーとして表示されます。「アセンブリ 'System.Data.SQLite'」への参照を追加する必要があります。私はそれがIEnumerableのためだが、なぜ私の図書館で参照が転送されていないのですか?実際に実行可能ファイルにSystem.Data.SQLiteへの参照を追加する必要がありますか?

答えて

1

はい、formatorを作成するとき、.NETはそれがFunc<SQLiteDataReader, T>の種類であると考えているため、実行可能ファイルへの参照を追加する必要があります。また、実行可能ファイルにはSystem.Data.SQLiteへの参照がないため、あなたのフォルマイザーの処理方法がわかりません。これは、フォーム作成者としてnullを渡した場合でも同じです。

2

アセンブリは、直接の参照(ライブラリなど)のみを認識し、その参照の参照を再帰的に読み込まないため、実行可能ファイルへの参照を追加する必要があります。

あなたのライブラリには、これを回避するためにSQLiteDataReaderを継承するラッパークラスを含めることができますが、実際に実行可能ファイルに余分な参照を持たせたくない場合以外はこれを行うという特別な利点はありません。

+1

あなたは正しいので+1しますが、サードパーティライブラリをラッピングすることには利点があります。アプリケーションで使用するライブラリ(特に外向き)を提供する場合は、ライブラリの実装の詳細をユーザーが気にする必要はありません。この場合、参照先のライブラリを抽象化し、ラッパーを介してシステムへのアクセスを制御する方がよいでしょう。私は同意します、これは必ずしも必要ではありませんが、あなたがこれをしたいと思っている決定的な時があります。 –

関連する問題