は、私は、外部DLLへの参照を持っているプログラムを持って、同じ機能を持つ別のライブラリをロードを動的に
magic.externalFunctions.nosql.dll
これらのDLLは、同じ機能を提供する外部ライブラリです。パブリックメソッドとプロパティさえ同じです。しかし、には、InterfaceクラスまたはBaseクラスがありません。
ここでは、ターゲットシステムに応じて、これらの2つのライブラリを選択する必要があります。彼らはが共通でインタフェースを持っているならば、私のようなものだろう:
public class DoDatabaseStuff() {
private IMagic _magic
public DoDatabaseStuff(bool useNoSql) {
if (useNoSql) {
_magic=new SqlMagic();
} else {
_magic=new NoSqlMagic();
}
myTable=_magic.Table.Create("CustomerTable");
myTable.Columns.Add(typeof(int),"ID");
myTable.Columns.Add(typeof(string),"Name");
}
}
を反射過剰な量を使用せずにこの問題を解決する方法はありますか?私はまだmyTable.Columns.Add()
の代わりにtableType.GetMethod("Add").Invoke()...
の代わりに
のようなものを使用したいと思います。異なるビルド構成を使用しているcsprojの条件も使いたくないです。これは理論上は機能しますが、csprojが自動的に変更されるたびに乱れます(例:ナゲットパッケージのアップデート)
同じことをする複数のライブラリを切り替える必要がある理由は何ですか?確かに非効率的な方法であり、依存関係の数が増える – jasttim
しかし、これを行う必要があれば、ヘルパー・メソッドを作成してSQLライブラリを呼び出し、NON SQLライブラリを呼び出すことができます – jasttim
プログラムを2つの異なるプラットフォームにインストールします。現時点では、同じソースファイルを含んでいるが参照が異なる2つのプロジェクトがありますが、構造が変更された場合はエラーの大きな原因になります。同様の問題を回避するために、2つの異なるgitブランチを作成しようとしました。ここでの主な問題は、EXTERNALライブラリです。これが私たち自身のコードであれば、これを別の方法でやったでしょう。 –