Class EfCoreAggregateRepository<TEntity, TKey, TMarker>
- Namespace
- Savvyio.Extensions.DependencyInjection.EFCore.Domain
- Assembly
- Savvyio.Extensions.DependencyInjection.EFCore.Domain.dll
Provides an implementation of the EfCoreRepository<TEntity, TKey> that is optimized for Domain Driven Design.
public class EfCoreAggregateRepository<TEntity, TKey, TMarker> : EfCoreRepository<TEntity, TKey>, IAggregateRepository<TEntity, TKey, TMarker>, IAggregateRepository<TEntity, TKey>, IPersistentRepository<TEntity, TKey, TMarker>, IPersistentRepository<TEntity, TKey>, IWritableRepository<TEntity, TKey, TMarker>, IWritableRepository<TEntity, TKey>, IReadableRepository<TEntity, TKey, TMarker>, IReadableRepository<TEntity, TKey>, ISearchableRepository<TEntity, TKey, TMarker>, ISearchableRepository<TEntity, TKey>, IDeletableRepository<TEntity, TKey, TMarker>, IRepository<TEntity, TKey, TMarker>, IDependencyInjectionMarker<TMarker>, IDeletableRepository<TEntity, TKey>, IRepository<TEntity, TKey> where TEntity : class, IAggregateRoot<IDomainEvent, TKey>
Type Parameters
TEntityThe type of the entity.
TKeyThe type of the key that uniquely identifies the entity.
TMarkerThe type used to mark the implementation that this repository represents. Optimized for Microsoft Dependency Injection.
- Inheritance
-
EfCoreRepository<TEntity, TKey>EfCoreAggregateRepository<TEntity, TKey, TMarker>
- Implements
-
IAggregateRepository<TEntity, TKey, TMarker>IAggregateRepository<TEntity, TKey>IPersistentRepository<TEntity, TKey, TMarker>IPersistentRepository<TEntity, TKey>IWritableRepository<TEntity, TKey, TMarker>IWritableRepository<TEntity, TKey>IReadableRepository<TEntity, TKey, TMarker>IReadableRepository<TEntity, TKey>ISearchableRepository<TEntity, TKey, TMarker>ISearchableRepository<TEntity, TKey>IDeletableRepository<TEntity, TKey, TMarker>IRepository<TEntity, TKey, TMarker>IDependencyInjectionMarker<TMarker>IDeletableRepository<TEntity, TKey>IRepository<TEntity, TKey>
- Inherited Members
Examples
The DI-registered EfCoreAggregateRepository<TAggregateRoot, TKey, TContext> resolves as IAggregateRepository<TAggregateRoot, TKey> when registered via AddEfCoreAggregateRepository. The aggregate data source registered by AddEfCoreAggregateDataSource provides the context. The example registers both services and resolves the repository interface.
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Savvyio.Domain;
using Savvyio.Extensions.DependencyInjection.Domain;
using Savvyio.Extensions.DependencyInjection.EFCore;
using Savvyio.Extensions.DependencyInjection.EFCore.Domain;
namespace ExampleApp;
public sealed class MarkerAggregateRepositoryExample
{
public bool IsResolvedAsMarkedAggregateRepository()
{
var services = new ServiceCollection();
services.AddEfCoreDataSource<OrderingMarker>(options =>
{
options.ContextConfigurator = builder => builder.EnableDetailedErrors();
options.ModelConstructor = modelBuilder => modelBuilder.Entity<OrderAggregate>().HasKey(order => order.Id);
});
services.AddEfCoreAggregateRepository<OrderAggregate, Guid, OrderingMarker>();
using var provider = services.BuildServiceProvider();
var repository = provider.GetRequiredService<IAggregateRepository<OrderAggregate, Guid, OrderingMarker>>();
return repository is EfCoreAggregateRepository<OrderAggregate, Guid, OrderingMarker>;
}
}
public sealed class OrderingMarker
{
}
public sealed class OrderAggregate : Aggregate<Guid, IDomainEvent>, IAggregateRoot<IDomainEvent, Guid>
{
public OrderAggregate(Guid id) : base(id)
{
}
}
Constructors
EfCoreAggregateRepository(IEfCoreDataSource<TMarker>)
Initializes a new instance of the EfCoreRepository<TEntity, TKey, TMarker> class.
public EfCoreAggregateRepository(IEfCoreDataSource<TMarker> source)
Parameters
sourceIEfCoreDataSource<TMarker>The IEfCoreDataSource<TMarker> that handles actual I/O communication with a source of data.