Skip to content

Commit 9b44f50

Browse files
authored
Merge pull request #17 from agileobjects/Issue15
Merge branch Issue15
2 parents d2af551 + 6fdef64 commit 9b44f50

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

AgileMapper.UnitTests/Configuration/WhenConfiguringMappingCallbacks.cs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ public void ShouldExecuteAPreMappingCallbackForASpecifiedTargetTypeConditionally
5656
{
5757
using (var mapper = Mapper.CreateNew())
5858
{
59-
mapper
60-
.WhenMapping
59+
mapper.WhenMapping
6160
.To<Person>()
6261
.Before
6362
.MappingBegins
@@ -87,8 +86,7 @@ public void ShouldExecutePreAndPostMappingCallbacksForASpecifiedMember()
8786
var preMappingName = default(string);
8887
var postMappingName = default(string);
8988

90-
mapper
91-
.WhenMapping
89+
mapper.WhenMapping
9290
.From<Person>()
9391
.Over<PersonViewModel>()
9492
.Before
@@ -116,8 +114,7 @@ public void ShouldExecuteAPreMemberMappingCallbackConditionally()
116114
{
117115
var mappedTargetId = default(Guid);
118116

119-
mapper
120-
.WhenMapping
117+
mapper.WhenMapping
121118
.From<Person>()
122119
.ToANew<Person>()
123120
.Before
@@ -145,8 +142,7 @@ public void ShouldExecuteAPostMemberMappingCallbackConditionally()
145142
var mappedAddress = default(Address);
146143
var callbackCalled = false;
147144

148-
mapper
149-
.WhenMapping
145+
mapper.WhenMapping
150146
.ToANew<Person>()
151147
.After
152148
.Mapping(p => p.Address)
@@ -194,8 +190,7 @@ public void ShouldRestrictAPreMappingCallbackByTargetType()
194190
{
195191
using (var mapper = Mapper.CreateNew())
196192
{
197-
mapper
198-
.WhenMapping
193+
mapper.WhenMapping
199194
.To<PublicField<string>>()
200195
.Before
201196
.MappingBegins
@@ -219,8 +214,7 @@ public void ShouldRestrictAPreMappingCallbackBySourceTypeConditionally()
219214
{
220215
using (var mapper = Mapper.CreateNew())
221216
{
222-
mapper
223-
.WhenMapping
217+
mapper.WhenMapping
224218
.From<PublicProperty<string>>()
225219
.To<PublicField<string>>()
226220
.Before
@@ -245,8 +239,7 @@ public void ShouldExecuteAPostMappingCallbackForASpecifiedTargetTypeConditionall
245239
{
246240
using (var mapper = Mapper.CreateNew())
247241
{
248-
mapper
249-
.WhenMapping
242+
mapper.WhenMapping
250243
.To<PersonViewModel>()
251244
.After
252245
.MappingEnds
@@ -274,8 +267,7 @@ public void ShouldRestrictAPostMappingCallbackByTargetType()
274267
{
275268
using (var mapper = Mapper.CreateNew())
276269
{
277-
mapper
278-
.WhenMapping
270+
mapper.WhenMapping
279271
.To<PublicProperty<string>>()
280272
.After
281273
.MappingEnds
@@ -299,8 +291,7 @@ public void ShouldRestrictAPostMappingCallbackBySourceType()
299291
{
300292
using (var mapper = Mapper.CreateNew())
301293
{
302-
mapper
303-
.WhenMapping
294+
mapper.WhenMapping
304295
.From<PublicField<string>>()
305296
.To<PublicProperty<string>>()
306297
.After
@@ -338,5 +329,30 @@ public void ShouldExecuteAPostMappingCallbackForADerivedType()
338329
derivedSource.ShouldBeSameAs(source);
339330
}
340331
}
332+
333+
// See https://github.com/agileobjects/AgileMapper/issues/15
334+
[Fact]
335+
public void ShouldPopulateAChildTargetObjectInAPostMappingCallback()
336+
{
337+
using (var mapper = Mapper.CreateNew())
338+
{
339+
mapper.WhenMapping
340+
.From<PublicProperty<string>>()
341+
.To<PublicField<string>>()
342+
.After
343+
.MappingEnds
344+
.Call(ctx => ctx.Target.Value += "!");
345+
346+
var source = new PublicField<PublicProperty<string>>
347+
{
348+
Value = new PublicProperty<string> { Value = "Hello" }
349+
};
350+
351+
var result = mapper.Map(source).ToANew<PublicProperty<PublicField<string>>>();
352+
353+
result.Value.ShouldNotBeNull();
354+
result.Value.Value.ShouldBe("Hello!");
355+
}
356+
}
341357
}
342358
}

AgileMapper/ObjectPopulation/MappingExpressionFactoryBase.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@ public Expression Create(IObjectMappingData mappingData)
4242
}
4343

4444
var basicMapperData = mapperData.WithNoTargetMember();
45+
var preMappingCallback = GetMappingCallbackOrNull(CallbackPosition.Before, basicMapperData, mapperData);
46+
var postMappingCallback = GetMappingCallbackOrNull(CallbackPosition.After, basicMapperData, mapperData);
4547

4648
mappingExpressions.AddUnlessNullOrEmpty(derivedTypeMappings);
47-
mappingExpressions.AddUnlessNullOrEmpty(GetMappingCallbackOrNull(CallbackPosition.Before, basicMapperData, mapperData));
49+
mappingExpressions.AddUnlessNullOrEmpty(preMappingCallback);
4850
mappingExpressions.AddRange(GetObjectPopulation(mappingData));
49-
mappingExpressions.AddUnlessNullOrEmpty(GetMappingCallbackOrNull(CallbackPosition.After, basicMapperData, mapperData));
51+
mappingExpressions.AddUnlessNullOrEmpty(postMappingCallback);
5052

5153
var mappingBlock = GetMappingBlock(mappingExpressions, mapperData);
5254
var mappingBlockWithTryCatch = WrapInTryCatch(mappingBlock, mapperData);

0 commit comments

Comments
 (0)