I initialize my MongoDatabase instance like this:
public static MongoDatabase Initialize(string connectionString)
{
var url = new MongoUrl(connectionString);
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase(url.DatabaseName);
return database;
}
Then, in my ioc setup (Autofac)
builder.Register(c => InitializeDatabase.Initialize()).SingleInstance();
So, I create ONE MongoDatabase per app instance
I then have a "CollectionResolver " class, which takes a MongoDatabase:
public class CollectionResolver : ICollectionResolver
{
private readonly MongoDatabase _mongoDatabase;
public CollectionResolver(MongoDatabase mongoDatabase)
{
_mongoDatabase = mongoDatabase;
}
public MongoCollection<T> Resolve<T>()
{
return _mongoDatabase.GetCollection<T>(typeof(T).Name.ToLower());
}
}
again, this is a singleton
However, when I load test my app, with several thousand users, using New Relic monitoring, I find i have many hundred open connections to mongo...
Any idea why?