コア機能が(C)DLLに含まれているアプリケーションがあります。このライブラリのエクスポート用のヘッダーファイルが存在します。このアプリケーションは非常に単一インスタンスです。つまり、ライブラリは一度に1つのファイルでのみ機能することを目的としているため、内部で多くのグローバル状態を使用します。アプリケーションがこのライブラリで使用する通常のワークフローは次のとおりです。
初期化
データベースを開く
データベースを操作する
データベースを閉じる
(繰り返す)
このライブラリが提供する機能を中心に.NETオブジェクトモデルを作成したいと思います。つまり、「データベース」をオブジェクト(呼び出し)にしたいということです。このオブジェクトDatabase
には、ライブラリ呼び出しに要約されるプロパティ/メソッドがあります。
Database
もちろん、いつでも複数のオブジェクトを使用できるようにしたいと思います。ただし、このライブラリのインスタンスが1つロードされている可能性があり(私は推測します)、ライブラリによるグローバル変数の使用によって制限されます。
私のオプションは何ですか?
最上位クラスDatabase
にファクトリメソッドを介してのみアクセスできるようにすることを検討しました。これにより、のインスタンスの数がDatabase
1つだけに制限されます。
public class Database {
private Database() {
library_init();
// ...
}
private Database m_instance;
public static Database Open(string file) {
if (m_instance != null)
throw new InvalidOperationException("...");
return new Database();
}
public Close() {
library_close();
// ...
m_instance = null;
}
}
ライブラリを別の場所に手動でロードするなど、他にできることはありますAppDomain
か?
私は実際には一度に1つのインスタンスが必要になると予測していますが、その制限に耐える必要がないのは素晴らしいことです。