2016-04-01 6 views
3

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; } 
    } 
} 
+0

haben u versucht 'Mapper.Configuration.AllowNullDestinationValues ​​= true'? – esiprogrammer

+0

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

Antwort

0

Statt Ersatz zu verwenden, verwenden ConvertUsing ...

 configuration.CreateMap<bool, MyClass>() 
    .ConvertUsing(i => i ? null : new object()); 
Verwandte Themen