У меня есть класс с набором Thing
s, который можно идентифицировать по Id
в сочетании с ThingCollectionId
.
Соответствующий DtoThing
содержит только Id
и я хотел бы загрузить свойство PropertyNotInDto
из всемирно известного класса ThingCollections
при отображении DtoThing
на Thing
.
Это может быть достигнуто с помощью IMappingAction
на DtoMyClass
дляMyClass
сопоставления, но для этого требуется, чтобы я перестроил Список вещей и добавил код сопоставления в MyDtoClass
вместо DtoThing
.
// sources for mapping
public class MyClass {
public Guid ThingCollectionId {get;set;}
public Dictionary<Thing, MyClassB> Things {get;set;}
}
public class Thing {
public int Id {get;set;}
// other properties
public string PropertyNotInDto {get;set;}
}
// targets for mapping
public class DtoMyClass {
public Guid ThingCollectionId {get;set;}
public Dictionary<DtoThing, DtoMyClassB> Things {get;set;}
}
public class DtoThing {
public int Id {get;set;}
// no other properties are saved in the DtoThing class
}
// global
public class ThingCollections {
public Dictionary<Guid, List<Thing>> ThingCollections {get;}
}
Есть ли способ добавить ThingCollectionId
кконтекст, который можно использовать, когда используется код отображения для DtoThing
на Thing
?
Мой воображаемый синтаксис будет выглядеть примерно так:
CreateMap<DtoThing, Thing>().AdvancedMapping<ThingMappingAction>();
, где ThingMappingAction
имеетдоступ к ThingCollectionId
.
Мой текущий подход выглядит следующим образом:
CreateMap<DtoMyClass, MyClass>().AfterMap<MyClassMappingAction>();
...
public MyClassMappingAction : IMappingAction<DtoMyClass, MyClass> {
private ThingCollections ThingCollections {get;}
public MyClassMappingAction(ThingCollections thingCollections){
ThingCollections = thingCollections;
}
public void Process(MyDtoClass source, MyClass target) {
// fix target.Things with ThingCollectionId, Thing.Id and ThingCollections
}
}
Но это особенно раздражает, поскольку Thing
используется в нескольких свойствах и требует специального кодадля каждого такого экземпляра, который нужно добавить в MyClassMappingAction
.