Rom*_*man 27 c# asp.net asp.net-mvc mongodb mongodb-.net-driver
管理MongoServer类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时将其关闭,还是应该使用像StructureMap这样的应用程序将其保存为应用程序整个生命周期的单例?
任何帮助都很感激.
moo*_*000 24
在官方的文件中指出,MongoServer,MongoDatabase,和MongoCollection是线程安全的,并且你应该建立一个单一的MongoServer为每次连接到数据库.
因此,MongoServer,MongoDatabase,和MongoCollection可以被安全地配置为单身.MongoServer甚至可以通过MongoDatabase为连续调用返回相同的实例来帮助强制执行此操作,并且MongoDatabase对MongoCollections 执行相同的操作.
即您的MongoServer实例可以安全地配置为在您的IoC容器中具有单一生活方式,您也可以设置注入,MongoDatabase甚至MongoCollection可以.
我自己MongoInstaller也在和温莎一起使用这个策略 - 你可以在这里看到我的:https://gist.github.com/2427676 - 它允许我的课程继续这样做:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
Run Code Online (Sandbox Code Playgroud)
为了有一个集合注入,很好,并准备使用.
C#驱动程序自动管理与服务器的连接(它使用连接池).当驱动程序自动连接时,无需调用server.Connect.不要调用server.Disconnect,因为它会关闭连接池中的所有连接并干扰高效的连接池.
至于管理MongoServer实例的生命周期,您可以将其存储在静态变量中,并将其用于进程的生命周期(并跨线程共享它,它是线程安全的).或者,您可以在需要获取服务器实例时再次调用MongoServer.Create.只要您继续使用相同的连接字符串调用MongoServer.Create,您将继续返回相同的MongoServer实例.
| 归档时间: |
|
| 查看次数: |
9357 次 |
| 最近记录: |