İki varlığım ve iki DTO'm var. Varlıkları DTO'larla eşleştiriyorum. DTOs basitleştirilmiş versiyonları bakmak gibi:Koleksiyonda özellikleri haritalandırmak için AfterMap nasıl kullanılır?
public class FooDto {
// Other properties removed for clarity.
public string Description { get; set; }
public decimal Total { get; set; }
public ICollection<BarDto> Bars { get; set; }
}
public class BarDto {
// Other properties removed for clarity.
public decimal Total { get; set; }
}
Foo
ve Bar
sınıfları şunlardır:
public class Foo {
public ICollection<Bar> Bars { get; set; }
}
public class Bar {
// Unimportant properties
}
Haritalama
ben gibi bir yöntemde bu haritalama ediyorum:
public FooDto Map(IMapper mapper, Foo foo) {
// _fooTotalService and _barTotalService injected elsewhere by DI.
return mapper.Map<Foo, FooDto>(foo, opt =>
{
opt.AfterMap((src, dest) =>
{
dest.Total = _fooTotalService.GetTotal(src);
dest.Bars.Total = ?????? // Needs to use _barTotalService.CalculateTotal(bar)
});
});
}
AutoMapper, Foo to FooDto ve Bar to BarDto için iyi yapılandırılmış eşlemleri zaten içerir.
Her bir BarDto'yu FooDto'da bir hizmet kullanarak toplamı güncellemem gerekiyor (bunun nedenleri çok uzun sürüyor - bu şekilde olması gerekiyorsa yeterlidir).
Ne sözdizimi bar
söz konusu Bar
, nerede olduğunu _barTotalService.CalculateTotal(bar)
yöntemi kullanarak BarDto
her Total
özelliği eşlemek için AfterMap
kullanmak gerekir?
_barTotalService.CalculateTotal
yönteminin Bar
örneğini değil BarDto
örneğini unutmayın.
'Total' BarDto'' bir özelliktir. FooDto.Bars'ın mülkü olamaz. Ayrıca 'bar' _barTotalService.CalculateTotal (bar) 'da nasıl geçiyor? –
'FooDto'' BarDto' türünde 'Bars' adlı bir koleksiyona sahiptir. Sırasıyla, her 'BarDto'''' Toplam' olarak adlandırılan bir özelliğe sahiptir. Bu "Toplam" özelliğini, eşlenen orijinal "Foo" nesnesinde bulunan "Bar" örneklerini kullanarak ayarlamalıyım. – Graham