BsonSerializationException при передаче конкретного параметра в конструкторе для заполнения более общего свойства с помощью драйвера .net - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть класс Identity, который расширен двумя классами StringIdentity и GuidIdentity.Я хочу использовать их в Objects как Property и сохранить их в MongoDb.Например, класс будет выглядеть следующим образом:

public class MyEvent : IDomainEvent
    {
        public MyEvent(GuidIdentity entityId)
        {
            EntityId = entityId;
        }

        public Identity EntityId { get; }
    }

IDomainEvent заставляет меня реализовать свойство Identity, поэтому я могу (и не хочу) изменять тип свойства на GuidIdentity.

Когда я десериализую свой класс, я получаю исключение, подобное этому:

Карта создателя для класса Microwave.Eventstores.UnitTests.MyEvent имеет 1 аргумент, но ни один из них не настроен.

Это выглядит логично в соответствии с документом .net драйвера, так как мое свойство не соответствует типу параметра и поэтому не может быть сериализовано.У меня было решение использовать Identity в качестве параметра конструктора или сделать конструктор закрытым и создать экземпляр класса с помощью статического метода Create, который принимает GuidIdentity в качестве параметра.Я также возился с BsonClassMap, но я действительно не хочу писать весь этот вид дублирующего кода для каждого класса, который реализует IDomainEvent

Так что есть ли способ сообщить драйверу .net использоватьконкретный класс из конструктора вместо более общего PropertyType для всех типов?Какой-то раствор серебряной пули?;)

Я очень новичок в mongodb, поэтому я не в курсе всех хитростей, которые могут быть с этим, может быть, кто-то может помочь мне здесь.

...