我目前正在与 MongoDriver
合作并且,根据 docs ,只有 MongoClient
需要是单例。
那讲得通。但是,在研究过程中,我在 SO 上发现了一些旧帖子。 The accepted answer (6岁)这里建议不仅可以MongoServer
是单例,但 MongoDatabase
也可以和 MongoCollection
.然而,这被 more recent post 反驳。 (2 年前)对于 Java MongoDriver 仅建议 MongoClient
应该是单例,因为其他连接可能会过时。
我最初的想法与我链接的最近的帖子有关,即 MongoClient
应该是唯一的单例,但考虑到相互矛盾的意见,我只是想确定一下。
谢谢。
最佳答案
我刚刚遇到了同样的问题,找到了微软官方教程,使用 IMongoCollection 作为单例对象中的只读字段,所以以单例方式使用它似乎没有问题。
根据 MongoDB 官方文档:
The implementation of IMongoCollection ultimately provided by a MongoClient is thread-safe and is safe to be stored globally or in an IoC container.
public class BookService
{
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);
}
public List<Book> Get() =>
_books.Find(book => true).ToList();
public Book Get(string id) =>
_books.Find<Book>(book => book.Id == id).FirstOrDefault();
public Book Create(Book book)
{
_books.InsertOne(book);
return book;
}
public void Update(string id, Book bookIn) =>
_books.ReplaceOne(book => book.Id == id, bookIn);
public void Remove(Book bookIn) =>
_books.DeleteOne(book => book.Id == bookIn.Id);
public void Remove(string id) =>
_books.DeleteOne(book => book.Id == id);
}
并在服务提供者中注册 BookService public void ConfigureServices(IServiceCollection services)
{
services.Configure<BookstoreDatabaseSettings>(
Configuration.GetSection(nameof(BookstoreDatabaseSettings)));
services.AddSingleton<IBookstoreDatabaseSettings>(sp =>
sp.GetRequiredService<IOptions<BookstoreDatabaseSettings>>().Value);
services.AddSingleton<BookService>();
services.AddControllers();
}
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-5.0&tabs=visual-studio
关于c# - MongoDatabase 和 MongoCollection 可以是单例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53168675/