[英]What is the right way to manage MongoDB connections in ASP.Net MVC?
管理MongoServer类生命周期的最佳实践是什么? 我应该创建一个并在每个请求结束时将其关闭,还是应该使用像StructureMap这样的应用程序将其保存为应用程序整个生命周期的单例?
任何帮助都很感激。
在官方文档中 ,声明MongoServer
, MongoDatabase
和MongoCollection
是线程安全的,并且您应该为连接到的每个数据库创建一个MongoServer
。
因此,可以安全地将MongoServer
, MongoDatabase
和MongoCollection
配置为单例。 MongoServer
甚至可以通过为连续调用返回相同的MongoDatabase
实例来帮助强制执行此操作, MongoDatabase
将对MongoCollection
执行相同的操作。
即您的MongoServer
实例可以安全地配置为在IoC容器中具有单一生活方式,您也可以为MongoDatabase
设置注入,甚至可以设置MongoCollection
。
我自己MongoInstaller
和温莎一起使用这个策略 - 你可以在这里看到我的MongoInstaller
: https : MongoInstaller
- 它允许我的课程继续这样做:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
为了有一个集合注入,很好,并准备使用。
C#驱动程序自动管理与服务器的连接(它使用连接池)。 当驱动程序自动连接时,无需调用server.Connect。 不要调用server.Disconnect,因为它会关闭连接池中的所有连接并干扰高效的连接池。
至于管理MongoServer实例的生命周期,您可以将其存储在静态变量中,并将其用于进程的生命周期(并跨线程共享它,它是线程安全的)。 或者,您可以在需要获取服务器实例时再次调用MongoServer.Create。 只要您继续使用相同的连接字符串调用MongoServer.Create,您将继续返回相同的MongoServer实例。
使用任何IOC容器(结构图,温莎等)注入它,并根据请求保持其生命周期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.