The three classes you mention are all thread safe. You could save them
somewhere in your application, or simply fetch them again when you
need them. In particular:
1. Every time MongoServer.Create is called with the same connection
string it returns the same instance
2. Every time GetDatabase is called with the same databaseName/
credentials combination it returns the same instance
2. Every time GetCollection is called with the collectionName/
TDefaultDocument combination name it returns the same instance
So you would only be saving a small amount of lookup overhead if you
store these values in your own variable somewhere. Choose whatever is
easiest.
One thing that you shouldn't do is put any of these values in session
state because they are not Serializable.