Ich habe einige Probleme herauszufinden, wie Automapper 4.2.1 für eine Typzuordnung zu ermöglichen, wo der Zielwert möglicherweise Null je nach dem Quellwert sein kann .Wie kann ich Automapper 4 konfigurieren, um einen Null-Zielwert zuzulassen?
Ältere Versionen von AutoMapper erlaubt ein AllowNullDestination Flagge über die Mapper-Konfiguration eingestellt werden, aber ich kann nicht das Äquivalent Rezept für die neue Version und den alten Mechanismus der Konfiguration über den statischen Mapper Objekt finden scheint veraltet wurden .
Ich habe das ohne Erfolg folgende versucht:
- Mapper.Configuration.AllowNullDestinationValues = true;
- Mapper.AllowNullDestinationValues = true;
- Mapper.Initialize (c => c.AllowNullDestinationValues = wahr);
Hier ist ein einfacher Testfall, der das Problem demonstriert. Dies schlägt in der letzten Zeile mit einer AutoMapperMappingException fehl, da die Methode Ersatz Null zurückgibt. Ich möchte, dass beide Mappings erfolgreich sind.
Ich würde es vorziehen, die Verwendung von .ForMember in der Lösung, da in dem realen Szenario zu adressieren Ich versuche zu vermeiden, wird die Zuordnung zwischen Bool und ‚Objekt‘ (eigentlich eine benutzerdefinierte Klasse) sollte über die gesamte Anwendung Objektbaum.
Obwohl es hier einige ähnliche Fragen zu StackOverflow gibt, habe ich keinen gefunden, der auf eine aktuelle Version von Automapper verweist.
Vielen Dank im Voraus für alle Anregungen
using AutoMapper;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace AutoMapperTest
{
[TestClass]
public class ExampleTest
{
[TestMethod]
public void NullDestinationCanBeMapped()
{
var mapper = new MapperConfiguration(configuration =>
{
configuration.CreateMap<Source, Target>();
//How should the following mapping be modified to pass the test?
configuration.CreateMap<bool, object>()
.Substitute(i => i ? null : new object());
}).CreateMapper();
var target1 = mapper.Map<Source, Target>(new Source {Member = false}); //succeeds
Assert.IsNotNull(target1.Member); //pass
var target2 = mapper.Map<Source, Target>(new Source {Member = true}); //fails to map with exception
Assert.IsNull(target2.Member); //not reached
}
}
public class Source
{
public bool Member { get; set; }
}
public class Target
{
public object Member { get; set; }
}
}
haben u versucht 'Mapper.Configuration.AllowNullDestinationValues = true'? – esiprogrammer
Dies ist in V4 als veraltet gekennzeichnet und funktioniert nicht. Ich habe alle folgenden ohne Erfolg versucht .... * Mapper.Configuration.AllowNullDestinationValues = true; * Mapper.AllowNullDestinationValues = true; Mapper.Initialize (c => c.AllowNullDestinationValues = true); – NeilMacMullen