diff --git a/src/Mapster.Tests/WhenIgnoreMapping.cs b/src/Mapster.Tests/WhenIgnoreMapping.cs
index 9bed5dc3..107405df 100644
--- a/src/Mapster.Tests/WhenIgnoreMapping.cs
+++ b/src/Mapster.Tests/WhenIgnoreMapping.cs
@@ -111,8 +111,78 @@ public void MappingToIntefaceWithIgnorePrivateSetProperty()
}
+ ///
+ /// https://github.com/MapsterMapper/Mapster/issues/953
+ ///
+ [TestMethod]
+ public void RemoveIgnoredFeatureIsWorked()
+ {
+ TypeAdapterConfig
+ .NewConfig()
+ .Map(dest => dest.PocoName, src => src.DtoName)
+ .Ignore(x=>x.PocoName);
+
+ TypeAdapterConfig
+ .NewConfig()
+ .Inherits();
+
+ var srcDerived = new DerivedPoco953 { PocoName = "Alice" };
+
+ // standart cases
+ var resultDerived = srcDerived.Adapt();
+
+ // when igrored member is remove
+
+ var resultDerivedRemoveAllIgnored = srcDerived
+ .Adapt(cfg =>
+ {
+ cfg
+ .NewConfig()
+ .Inherits()
+ .IgnoredClear();
+ });
+
+ var resultDerivedRemove = srcDerived
+ .Adapt(cfg =>
+ {
+ cfg
+ .NewConfig()
+ .Inherits()
+ .IgnoredRemove(x=>x.PocoName);
+ });
+
+ var resultDerivedRemoveByName = srcDerived
+ .Adapt(cfg =>
+ {
+ cfg
+ .NewConfig()
+ .Inherits()
+ .IgnoredRemove("PocoName");
+ });
+
+
+ resultDerived.PocoName.ShouldNotBeNullOrEmpty();
+ resultDerivedRemoveAllIgnored.PocoName.ShouldBe("Alice");
+ resultDerivedRemove.PocoName.ShouldBe("Alice");
+ resultDerivedRemoveByName.PocoName.ShouldBe("Alice");
+
+ }
+
#region TestClasses
+ public class BaseDTO953
+ {
+ public string DtoName { get; set; }
+ }
+ public class DerivedDTO953: BaseDTO953 { }
+
+ public class BasePoco953
+ {
+ public string PocoName { get; set; }
+ }
+
+ public class DerivedPoco953 : BasePoco953 { }
+
public interface InterfaceDestination723
{
public string Inter { get; set; }
diff --git a/src/Mapster/TypeAdapterSetter.cs b/src/Mapster/TypeAdapterSetter.cs
index 5dd0df11..b50933de 100644
--- a/src/Mapster/TypeAdapterSetter.cs
+++ b/src/Mapster/TypeAdapterSetter.cs
@@ -73,6 +73,25 @@ public static TSetter IgnoreAttribute(this TSetter setter, params Type[
return setter;
}
+ public static TSetter IgnoredClear(this TSetter setter) where TSetter : TypeAdapterSetter
+ {
+ setter.CheckCompiled();
+ setter.Settings.Ignore.Clear();
+
+ return setter;
+ }
+
+ public static TSetter IgnoredRemove(this TSetter setter, params string[] names) where TSetter : TypeAdapterSetter
+ {
+ setter.CheckCompiled();
+
+ foreach (var name in names)
+ {
+ setter.Settings.Ignore.TryRemove(name, out _);
+ }
+ return setter;
+ }
+
public static TSetter IncludeAttribute(this TSetter setter, params Type[] types) where TSetter : TypeAdapterSetter
{
setter.CheckCompiled();
@@ -554,6 +573,16 @@ internal TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig paren
return (TypeAdapterSetter)base.Ignore(members);
}
+ public TypeAdapterSetter IgnoredRemove(params Expression>[] members)
+ {
+ this.CheckCompiled();
+
+ foreach (var member in members)
+ {
+ Settings.Ignore.TryRemove(member.GetMemberPath()!, out _);
+ }
+ return this;
+ }
public new TypeAdapterSetter Map(
Expression> member,
Expression> source)