What is the right way to manage MongoDB connections in ASP.Net MVC?
asp.net, asp.net-mvc, c#, mongodb, mongodb-.net-driver
Solution
In the official documentation it is stated that `MongoServer`, `MongoDatabase`, and `MongoCollection` are thread safe, and that you're supposed to create one single `MongoServer` for each database that you connect to.
Thus, `MongoServer`, `MongoDatabase`, and `MongoCollection` can safely be configured to be singletons. `MongoServer` will even help enforcing this by returning the same `MongoDatabase` instance for successive calls, and `MongoDatabase` will do the same thing for `MongoCollection`s.
I.e. your `MongoServer` instance can safely be configured to have a singleton lifestyle in your IoC container, and you might as well set up injection for `MongoDatabase` and maybe even `MongoCollection` as well.
I'm using this strategy with Windsor myself - you can see my `MongoInstaller` here: https://gist.github.com/2427676 - it allows my classes to just go ahead and do this:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
in order to have a collection injected, nice and ready to use.
Problem
What is the best practice for managing the MongoServer class life cycle? Should I create one and close it at the end of each request or should it be kept as a singleton for the entire life of the app using something like StructureMap? Any help is appreciate.