Code: Select all
AggregateRoot
Code: Select all
public abstract class AggregateRoot : IDomainEventAccumulator where TAggregate : AggregateRoot
{
public Guid Id { get; protected set; } = Guid.NewGuid();
public ICollection DomainEvents { get; } = new List();
protected void AddDomainEvent(IDomainEvent domainEvent)
{
DomainEvents.Add(domainEvent);
}
...
}
< /code>
Abgeleitete Klasse: < /p>
public class Partner : AggregateRoot
{
public Partner(string name)
{
Name = name;
AddDomainEvent(new PartnerCreatedEvent(Id));
}
}
durchgeführt wurde
Code: Select all
public class PartnerConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.ToContainer(nameof(CosmosDbContext.Partners));
builder.HasPartitionKey(d => d.Id);
var assembly = Assembly.Load("MyApplication.Domain");
var domainEventTypes = assembly.GetTypes().Where(t => typeof(IDomainEvent)
.IsAssignableFrom(t) && !t.IsAbstract)
.ToArray();
var serializerOptions = new JsonSerializerOptions()
{
TypeInfoResolver = new EventTypeResolver(domainEventTypes)
};
builder.Property(c => c.DomainEvents).HasConversion(
v => JsonSerializer.Serialize(v, serializerOptions),
v => JsonSerializer.Deserialize(v, serializerOptions));
}
}
zu übergeben
Code: Select all
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties(c => c.HaveConversion());
}