【发布时间】:2020-08-07 14:57:06
【问题描述】:
所以我正在构建一个连接到 mongoDB 实例的 ASP.NET-Core API。我正在阅读有关此主题的 official Microsoft tutorial 并遇到了链接的代码示例。
基本上他们实例化一个BookService 并在构造函数的范围内创建一个MongoClient 的新实例。
private readonly IMongoCollection<Book> _books;
public BookService(IBookstoreDatabaseSettings settings)
{
var client = new MongoClient(settings.ConnectionString);
var database = client.GetDatabase(settings.DatabaseName);
_books = database.GetCollection<Book>(settings.BooksCollectionName);
}
据我了解,_books 集合在没有 MongoClient 实例存在的情况下仍然可以工作,因为它知道它被分配到哪个集合以及如何与它通信但mongoDB MongoClient re-use guidelines 建议存储一个全局/静态实例客户端重新使用。 (我猜是因为相同的端口耗尽等原因,您会想要重用 HTTPClients?它还支持内部连接池,这很好!)
进一步思考它们的含义,我确信为我的每个服务实例化并立即为客户端删除一个实例是个坏主意。但是我对这个范围内的 MongoDB 一无所知。
我知道这只是一个教程,它们往往是“快速而肮脏”的编码方式,但由于我对整个主题都是新手,所以我只想确保我能正确开始。
那么,按照“微软的方式”来做这件事可以吗?还是我应该为客户端或工厂创建一个全局实例?
//编辑:
为了澄清:最好在启动时将MongoClient注册为单例并将其注入需要它的类或使用上述方法?
【问题讨论】:
-
这能回答你的问题吗? mongodb service - singleton or scoped?
-
是的,确实如此!谢谢!
标签: c# mongodb asp.net-core