Все мои сущности и объекты значений реализуют интерфейсы маркеров IEntity
и IValueObject
. Я настроил их так, чтобы они обрабатывались как компоненты следующим образом:
public override bool IsComponent(Type type)
{
return typeof(IValueObject).IsAssignableFrom(type);
}
public override bool ShouldMap(Type type)
{
return typeof(IEntity).IsAssignableFrom(type) || typeof(IValueObject).IsAssignableFrom(type);
}
К сожалению, похоже, это не позволяет автоматически отображать сущности, которые имеют коллекции объектов значений, как коллекции компонентов. Например:
public class MyEntity : IEntity
{
public IList<MyValueObject> Objects { get; set; }
}
public class MyValueObject : IValueObject
{
public string Name { get; set; }
public string Value { get; set; }
}
Есть ли способ определить такое соглашение, чтобы каждый раз, когда объект IEntity
имел IList
типа, реализующего IValueObject
, он отображается так, как если бы я указал:
HasMany(x => x.Objects)
.Component(x => {
x.Map(m => m.Name);
x.Map(m => m.Value);
});
Чего я не хочу делать, так это вручную выполнять эти переопределения для каждого класса и снова и снова записывать каждое свойство для объекта значения.