using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MongoDbGenericRepository.DataAccess.Create; using MongoDbGenericRepository.Models; namespace MongoDbGenericRepository { /// /// The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. /// Its constructor must be given a connection string and a database name. /// public abstract partial class BaseMongoRepository : IBaseMongoRepository_Create { private readonly object _initLock = new object(); private IMongoDbCreator _mongoDbCreator; /// /// The MongoDbCreator field. /// protected virtual IMongoDbCreator MongoDbCreator { get { if (_mongoDbCreator != null) { return _mongoDbCreator; } lock (_initLock) { if (_mongoDbCreator == null) { _mongoDbCreator = new MongoDbCreator(MongoDbContext); } } return _mongoDbCreator; } set => _mongoDbCreator = value; } /// public virtual async Task AddOneAsync(TDocument document) where TDocument : IDocument where TKey : IEquatable { await AddOneAsync(document, CancellationToken.None); } /// public virtual async Task AddOneAsync(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { await MongoDbCreator.AddOneAsync(document, cancellationToken); } /// public virtual async Task AddOneAsync(TDocument document) where TDocument : IDocument { await AddOneAsync(document, CancellationToken.None); } /// public virtual async Task AddOneAsync(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument { await AddOneAsync(document, cancellationToken); } /// public virtual void AddOne(TDocument document) where TDocument : IDocument where TKey : IEquatable { AddOne(document, CancellationToken.None); } /// public virtual void AddOne(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { MongoDbCreator.AddOne(document, cancellationToken); } /// public virtual void AddOne(TDocument document) where TDocument : IDocument { AddOne(document, CancellationToken.None); } /// public virtual void AddOne(TDocument document, CancellationToken cancellationToken) where TDocument : IDocument { AddOne(document, cancellationToken); } /// public virtual async Task AddManyAsync(IEnumerable documents) where TDocument : IDocument where TKey : IEquatable { await AddManyAsync(documents, CancellationToken.None); } /// public virtual async Task AddManyAsync(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { await MongoDbCreator.AddManyAsync(documents, cancellationToken); } /// public virtual async Task AddManyAsync(IEnumerable documents) where TDocument : IDocument { await AddManyAsync(documents, CancellationToken.None); } /// public virtual async Task AddManyAsync(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument { await AddManyAsync(documents, cancellationToken); } /// public virtual void AddMany(IEnumerable documents) where TDocument : IDocument where TKey : IEquatable { AddMany(documents, CancellationToken.None); } /// public virtual void AddMany(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument where TKey : IEquatable { MongoDbCreator.AddMany(documents, cancellationToken); } /// public virtual void AddMany(IEnumerable documents) where TDocument : IDocument { AddMany(documents, CancellationToken.None); } /// public virtual void AddMany(IEnumerable documents, CancellationToken cancellationToken) where TDocument : IDocument { AddMany(documents, cancellationToken); } } }