Я пытаюсь создать простое хранилище событий, используя C # и [ServiceStack] Redis.
public class AggregateEvents
{
public Guid Id { get; set;}
public List<DomainEvent> Events { get; set; }
}
public abstract class DomainEvent { }
public class UserRegisteredEvent : DomainEvent
{
public Guid UserId { get; set; }
public string Name { get; set; }
}
public class UserPromotedEvent : DomainEvent
{
public Guid UserId { get; set; }
public string NewRole { get; set; }
}
если я сделаю roots.GetAll()
, я получу исключение, потому что абстрактный класс не может быть создан. Если вместо этого я превращу базовый класс в интерфейс, объект Events будет иметь значение null, и объекты, которые я там храню, будут потеряны.
Есть мысли?
Редактировать 1
Нет радости, используя v3.03 и этот код:
[Test]
public void foo()
{
var client = new RedisClient("localhost");
var users = client.GetTypedClient<AggregateEvents>();
var userId = Guid.NewGuid();
var eventsForUser = new AggregateEvents
{
Id = userId,
Events = new List<DomainEvent>()
};
eventsForUser.Events.Add(new UserPromotedEvent { UserId = userId });
users.Store(eventsForUser);
var all = users.GetAll(); // exception
}
Редактировать 2
Также не работает с этим подходом;
[Test]
public void foo()
{
var userId = Guid.NewGuid();
var client = new RedisClient("localhost");
client.As<DomainEvent>().Lists["urn:domainevents-" + userId].Add(new UserPromotedEvent {UserId= userId});
var users = client.As<DomainEvent>().Lists["urn:domainevents-" + userId];
foreach (var domainEvent in users) // exception
{
}
}