MongoServer クラスのライフ サイクルを管理するためのベスト プラクティスは何ですか? 作成して各リクエストの最後に閉じる必要がありますか、それとも StructureMap のようなものを使用して、アプリの全期間にわたってシングルトンとして保持する必要がありますか?
どんな助けでも大歓迎です。
MongoServer クラスのライフ サイクルを管理するためのベスト プラクティスは何ですか? 作成して各リクエストの最後に閉じる必要がありますか、それとも StructureMap のようなものを使用して、アプリの全期間にわたってシングルトンとして保持する必要がありますか?
どんな助けでも大歓迎です。
公式ドキュメントでは、MongoServer
、MongoDatabase
、およびMongoCollection
はスレッドセーフであり、MongoServer
接続するデータベースごとに 1 つのシングルを作成する必要があると記載されています。
したがってMongoServer
、、、MongoDatabase
およびMongoCollection
シングルトンとして安全に構成できます。連続する呼び出しに対してMongoServer
同じインスタンスを返すことでこれを強制するのに役立ち、sに対しても同じことを行います。MongoDatabase
MongoDatabase
MongoCollection
つまり、インスタンスは、MongoServer
IoC コンテナーでシングルトン ライフスタイルを持つように安全に構成できます。MongoDatabase
MongoCollection
私は自分自身でウィンザーでこの戦略を使用しています - あなたは私のMongoInstaller
ここを見ることができます: https://gist.github.com/2427676 - それは私のクラスが先に進んでこれを行うことを可能にします:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
コレクションを注入し、すぐに使用できるようにします。
C# ドライバーは、サーバーへの接続を自動的に管理します (接続プールを使用します)。ドライバーが自動的に接続するため、server.Connect を呼び出す必要はありません。server.Disconnect を呼び出さないでください。接続プール内のすべての接続が閉じられ、効率的な接続プールが妨げられるためです。
MongoServer インスタンスのライフサイクルを管理する限り、それを静的変数に自由に格納して、プロセスの存続期間中使用できます (スレッド間で共有するため、スレッドセーフです)。または、サーバー インスタンスを取得する必要があるときはいつでも、MongoServer.Create を再度呼び出すことができます。同じ接続文字列で MongoServer.Create を呼び出し続ける限り、同じ MongoServer インスタンスを取得し続けます。
任意のIOCコンテナー(構造マップ、ウィンザーなど)を使用して注入し、要求ごとにその存続期間を維持します。