Я попытался реализовать общий репозиторий и общий контекст для использования с mongodb.Проблема, с которой я столкнулся, заключается в том, что я получаю следующее сообщение об ошибке:
Не удается разрешить службу для типа 'CommonLibrary.Database.GenericContext`
Вот моя служба настройкиметод из класса запуска:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<Settings>(
options =>
{
options.ConnectionString = Configuration.GetSection("MongoDb:ConnectionString").Value;
options.Database = Configuration.GetSection("MongoDb:Database").Value;
});
services.AddTransient(typeof(IGenericContext<>), typeof(GenericContext<>));
services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));
}
Мой общий класс контекста:
public class GenericContext<T> : IGenericContext<T> where T : BaseClass
{
private readonly IMongoDatabase db;
public GenericContext(IOptions<Settings> options)
{
var client = new MongoClient(options.Value.ConnectionString);
db = client.GetDatabase(options.Value.Database);
}
public IMongoCollection<T> Entities => db.GetCollection<T>("Entities");
}
Мой общий класс репозитория:
public class GenericRepository<T> : IGenericRepository<T> where T : BaseClass
{
private readonly GenericContext<T> _context;
public GenericRepository(GenericContext<T> context)
{
_context = context;
}
public async Task<IEnumerable<T>> GetAll()
{
return await _context
.Entities
.Find(_ => true)
.ToListAsync();
}
public Task<T> GetById(string customerId)
{
FilterDefinition<T> filter = Builders<T>.Filter.Eq(m => m.EntityId, customerId);
return _context
.Entities
.Find(filter)
.FirstOrDefaultAsync();
}
public async Task Create(T customer)
{
await _context.Entities.InsertOneAsync(customer);
}
public async Task<bool> Update(T customer)
{
ReplaceOneResult updateResult =
await _context
.Entities
.ReplaceOneAsync(
filter: g => g.Id == customer.Id,
replacement: customer);
return updateResult.IsAcknowledged
&& updateResult.ModifiedCount > 0;
}
public async Task<bool> Delete(string entityId)
{
FilterDefinition<T> filter = Builders<T>.Filter.Eq(m => m.EntityId, entityId);
DeleteResult deleteResult = await _context
.Entities
.DeleteOneAsync(filter);
return deleteResult.IsAcknowledged
&& deleteResult.DeletedCount > 0;
}
}
Мой базовый класс:
public class BaseClass
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement]
public string EntityId { get; set; }
}
И мой производный класс Customer:
public class Customer : BaseClass
{
[BsonElement]
public string CustomerName { get; set; }
}
Есть ли у вас какие-либо идеи, почему мой общий репозиторий не может быть создан?Кажется, это проблема GenericContext, но я не вижу, где.
Спасибо