ReactiveX(より正確にはRx.Net)とSQLite.Netでデータアクセスレイヤーを構築しようとしています。ReactiveX:Observable.Create()を1回だけ呼び出すようにする
ジョブの一部が、データベース接続を返すオブザーバブルを作成しているため、必要な場合にのみ遅延して開くことができます。これは私がこれまでに思い付いたものです:
var connection = Observable.Create<SQLiteConnection>(observer =>
{
Debug.WriteLine("CheckInStore: Opening database connection");
var database = new SQLiteConnection(configuration.ConnectionString.DatabasePath);
observer.OnNext(database);
observer.OnCompleted();
return Disposable.Create(() =>
{
Debug.WriteLine("CheckInStore: Closing database connection");
database.Close();
});
});
// Further down the line, a query would look like this:
var objects = connection.SelectMany(db => db.Query<>("select * from MyTable"));
は残念ながら、誰かがこの観測可能に加入するたびに、新しい接続が作成されます。また、購読が終了すると閉鎖されます。
.Replay(1).RefCount()
を使ってみましたが、何も変わりませんでした。とにかく全体がRefCount
のものであることはわかりません。
このデータベース接続をシングルトンにするにはどうすればよいですか?