Skip to content

Commit f1fd9f7

Browse files
authored
chore: Merge pull request #956 from DocSvartz/ignore-improvement
feat - add Ignored Remove
2 parents da0702a + 609e5ed commit f1fd9f7

2 files changed

Lines changed: 99 additions & 0 deletions

File tree

src/Mapster.Tests/WhenIgnoreMapping.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,78 @@ public void MappingToIntefaceWithIgnorePrivateSetProperty()
111111

112112
}
113113

114+
/// <summary>
115+
/// https://github.com/MapsterMapper/Mapster/issues/953
116+
/// </summary>
117+
[TestMethod]
118+
public void RemoveIgnoredFeatureIsWorked()
119+
{
120+
TypeAdapterConfig<BaseDTO953, BasePoco953>
121+
.NewConfig()
122+
.Map(dest => dest.PocoName, src => src.DtoName)
123+
.Ignore(x=>x.PocoName);
124+
125+
TypeAdapterConfig<DerivedDTO953, DerivedPoco953>
126+
.NewConfig()
127+
.Inherits<BaseDTO953, BasePoco953>();
128+
129+
var srcDerived = new DerivedPoco953 { PocoName = "Alice" };
130+
131+
// standart cases
132+
var resultDerived = srcDerived.Adapt<DerivedPoco953>();
133+
134+
// when igrored member is remove
135+
136+
var resultDerivedRemoveAllIgnored = srcDerived
137+
.Adapt<DerivedPoco953>(cfg =>
138+
{
139+
cfg
140+
.NewConfig<DerivedDTO953, DerivedPoco953>()
141+
.Inherits<BaseDTO953, BasePoco953>()
142+
.IgnoredClear();
143+
});
144+
145+
var resultDerivedRemove = srcDerived
146+
.Adapt<DerivedPoco953>(cfg =>
147+
{
148+
cfg
149+
.NewConfig<DerivedDTO953, DerivedPoco953>()
150+
.Inherits<BaseDTO953, BasePoco953>()
151+
.IgnoredRemove(x=>x.PocoName);
152+
});
153+
154+
var resultDerivedRemoveByName = srcDerived
155+
.Adapt<DerivedPoco953>(cfg =>
156+
{
157+
cfg
158+
.NewConfig<DerivedDTO953, DerivedPoco953>()
159+
.Inherits<BaseDTO953, BasePoco953>()
160+
.IgnoredRemove("PocoName");
161+
});
162+
163+
164+
resultDerived.PocoName.ShouldNotBeNullOrEmpty();
165+
resultDerivedRemoveAllIgnored.PocoName.ShouldBe("Alice");
166+
resultDerivedRemove.PocoName.ShouldBe("Alice");
167+
resultDerivedRemoveByName.PocoName.ShouldBe("Alice");
168+
169+
}
170+
114171
#region TestClasses
115172

173+
public class BaseDTO953
174+
{
175+
public string DtoName { get; set; }
176+
}
177+
public class DerivedDTO953: BaseDTO953 { }
178+
179+
public class BasePoco953
180+
{
181+
public string PocoName { get; set; }
182+
}
183+
184+
public class DerivedPoco953 : BasePoco953 { }
185+
116186
public interface InterfaceDestination723
117187
{
118188
public string Inter { get; set; }

src/Mapster/TypeAdapterSetter.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,25 @@ public static TSetter IgnoreAttribute<TSetter>(this TSetter setter, params Type[
7373
return setter;
7474
}
7575

76+
public static TSetter IgnoredClear<TSetter>(this TSetter setter) where TSetter : TypeAdapterSetter
77+
{
78+
setter.CheckCompiled();
79+
setter.Settings.Ignore.Clear();
80+
81+
return setter;
82+
}
83+
84+
public static TSetter IgnoredRemove<TSetter>(this TSetter setter, params string[] names) where TSetter : TypeAdapterSetter
85+
{
86+
setter.CheckCompiled();
87+
88+
foreach (var name in names)
89+
{
90+
setter.Settings.Ignore.TryRemove(name, out _);
91+
}
92+
return setter;
93+
}
94+
7695
public static TSetter IncludeAttribute<TSetter>(this TSetter setter, params Type[] types) where TSetter : TypeAdapterSetter
7796
{
7897
setter.CheckCompiled();
@@ -554,6 +573,16 @@ internal TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig paren
554573
return (TypeAdapterSetter<TSource, TDestination>)base.Ignore(members);
555574
}
556575

576+
public TypeAdapterSetter<TDestination> IgnoredRemove(params Expression<Func<TDestination, object>>[] members)
577+
{
578+
this.CheckCompiled();
579+
580+
foreach (var member in members)
581+
{
582+
Settings.Ignore.TryRemove(member.GetMemberPath()!, out _);
583+
}
584+
return this;
585+
}
557586
public new TypeAdapterSetter<TSource, TDestination> Map<TDestinationMember, TSourceMember>(
558587
Expression<Func<TDestination, TDestinationMember>> member,
559588
Expression<Func<TSourceMember>> source)

0 commit comments

Comments
 (0)