管理 MongoServer 类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时将其关闭,还是应该在应用程序的整个生命周期中使用 StructureMap 之类的东西将其作为单例保存?
任何帮助表示赞赏。
管理 MongoServer 类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时将其关闭,还是应该在应用程序的整个生命周期中使用 StructureMap 之类的东西将其作为单例保存?
任何帮助表示赞赏。
在官方文档中声明MongoServer
,MongoDatabase
和MongoCollection
是线程安全的,并且您应该为MongoServer
您连接到的每个数据库创建一个。
因此,MongoServer
、MongoDatabase
和MongoCollection
可以安全地配置为单例。甚至会通过为连续调用MongoServer
返回相同的实例来帮助执行此操作,并且将为s 做同样的事情。MongoDatabase
MongoDatabase
MongoCollection
即,您的MongoServer
实例可以安全地配置为在您的 IoC 容器中具有单例生活方式,您也可以设置注入,MongoDatabase
甚至MongoCollection
也可以。
我自己在温莎使用这个策略 - 你可以MongoInstaller
在这里看到我的:https ://gist.github.com/2427676 - 它允许我的课程继续执行此操作:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
为了注入一个集合,很好并且可以使用。
C# 驱动程序自动管理与服务器的连接(它使用连接池)。无需调用 server.Connect,因为驱动程序会自动连接。不要调用 server.Disconnect ,因为这会关闭连接池中的所有连接并干扰有效的连接池。
至于管理 MongoServer 实例的生命周期,您可以自由地将其存储在静态变量中并在进程的生命周期中使用它(并跨线程共享它,它是线程安全的)。或者,您可以在需要获取服务器实例时再次调用 MongoServer.Create。只要您继续使用相同的连接字符串调用 MongoServer.Create,您将继续返回相同的 MongoServer 实例。
使用任何 IOC 容器(结构图、Windsor 等)注入它,并根据每个请求保持其生命周期。