27

管理 MongoServer 类生命周期的最佳实践是什么?我应该创建一个并在每个请求结束时将其关闭,还是应该在应用程序的整个生命周期中使用 StructureMap 之类的东西将其作为单例保存?

任何帮助表示赞赏。

4

3 回答 3

24

官方文档中声明MongoServer,MongoDatabaseMongoCollection是线程安全的,并且您应该为MongoServer您连接到的每个数据库创建一个。

因此,MongoServerMongoDatabaseMongoCollection可以安全地配置为单例。甚至会通过为连续调用MongoServer返回相同的实例来帮助执行此操作,并且将为s 做同样的事情。MongoDatabaseMongoDatabaseMongoCollection

即,您的MongoServer实例可以安全地配置为在您的 IoC 容器中具有单例生活方式,您也可以设置注入,MongoDatabase甚至MongoCollection也可以。

我自己在温莎使用这个策略 - 你可以MongoInstaller在这里看到我的:https ://gist.github.com/2427676 - 它允许我的课程继续执行此操作:

public class SomeClass
{
    public SomeClass(MongoCollection<Person> people)
    { ... }
}

为了注入一个集合,很好并且可以使用。

于 2012-04-20T10:35:17.440 回答
8

C# 驱动程序自动管理与服务器的连接(它使用连接池)。无需调用 server.Connect,因为驱动程序会自动连接。不要调用 server.Disconnect ,因为这会关闭连接池中的所有连接并干扰有效的连接池。

至于管理 MongoServer 实例的生命周期,您可以自由地将其存储在静态变量中并在进程的生命周期中使用它(并跨线程共享它,它是线程安全的)。或者,您可以在需要获取服务器实例时再次调用 MongoServer.Create。只要您继续使用相同的连接字符串调用 MongoServer.Create,您将继续返回相同的 MongoServer 实例。

于 2012-04-21T13:57:12.160 回答
3

使用任何 IOC 容器(结构图、Windsor 等)注入它,并根据每个请求保持其生命周期。

于 2012-04-20T07:29:23.887 回答