Aggregateroot-Basisklasse:
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: Select all
public class Partner : AggregateRoot
{
public Partner(string name)
{
Name = name;
AddDomainEvent(new PartnerCreatedEvent(Id));
}
}
durchgeführt habe.
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));
}
}
< /code>
Idealerweise möchte ich dies auf alle Klassen anwenden, die aus der Basisklasse der Aggregateroot abgeleitet sind, aber keinen Weg finden, dies zu tun. Ich habe auch versucht, die folgenden [b] dbContext [/b] zu verwenden, kann jedoch keinen Weg finden, den Typinforesolver protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties(c => c.HaveConversion());
}
< /code>
Hat jemand eine Idee, wie ich das Ziel erreichen kann. Dies muss nicht die Verwendung von JsonSerializer enthalten, aber dies ist so nah wie ich bisher gekommen bin.
 Mobile version
 Mobile version