Sparen von Domain -Ereignissen auf der Entität im Unternehmen Framework (COSMOSDB)C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Sparen von Domain -Ereignissen auf der Entität im Unternehmen Framework (COSMOSDB)

Post by Anonymous »

Nach dem domänengesteuerten Design versuche ich, ein Operationsbox -Muster zu implementieren, das Domänenereignisse auf einem von Aggregateroot abgeleiteten Entität in derselben "Transaktion" in CosmosDB speichert. />https://github.com/dotnet/efcore/issues/17308
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);
}
...
}
Abgeleitete Klasse:

Code: Select all

public class Partner : AggregateRoot
{
public Partner(string name)
{
Name = name;
AddDomainEvent(new PartnerCreatedEvent(Id));
}
}
Wie Sie sehen können, kann IdomaineEvent mehrere Implementierungen haben und müssen auf die richtigen Typen serialisiert/deserialisiert werden. Ich habe dies an der einzelnen Entität gearbeitet, indem ich in der entityTypeConfiguration :
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 
für JsonSerializer zu übergeben:
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post