Visual Studio 2008 に C# .NET Compact Framework 3.5 モバイル プロジェクトがあります。プログラムはバーコード スキャナーを使用し、2 種類の Windows Mobile デバイスで動作します (どちらも独自の SDK を使用してバーコード スキャナーを操作します)。条件付きでスキャナー SDK SDK DLL ファイルへの参照を追加するにはどうすればよいですか? つまり、HARDWARE1 構成用にコンパイルする場合、HARDWARE2-SCANNER-SDK.DLL への参照を追加したくありません。
2 に答える
app.config ファイルで読み込む DLL を指定し、Assembly.Loadメソッドを使用して適切なライブラリ (ライブラリ) を読み込むことができます。
それが簡単な答えです。ただし、これを実際に機能させるには、共通の API を共有するいくつかの「ラッパー」アセンブリを (別のライブラリにも) 作成する必要がある場合があります。これにより、最終的なアプリケーションは、スキャナー情報の取得元を気にする必要がなくなります。どのハードウェアが使用されているかを認識しない必要があります。
ところで:これはすべて、クラスレベルではなくモジュールではありますが、依存性注入の概念に関連しています。開始するためのいくつかのリソースを次に示します。
http://msdn.microsoft.com/en-us/magazine/cc163739.aspx http://en.wikipedia.org/wiki/Dependency_injection
なぜあなたはする必要があるのですか?スキャナ アクセスにインターフェイスを使用する場合、1 つの実装は 1 つの SDK を参照し、もう 1 つの実装は他の SDK を参照します。
実行時に、実際に作成したクラスは、参照されたアセンブリを読み込もうとします。インスタンス化する前にハードウェアを検出している場合は、適切な SDK 参照が読み込まれます。基本的に、存在しない SDK を使用しない場合、それをロードしようとすることはありません。
これが問題になる唯一の理由は、2 つの SDK が同じクラス名を使用している場合です。その場合、私はまだインターフェイスベースを使用しますが、インターフェイスの実装ごとに異なる DLL を使用し、それらのプロジェクトは適切な SDK を参照します。