2012-03-30 11 views
2

Ich bin auf der Suche nach der einfachsten/elegantesten Möglichkeit, ein Quellobjekt mithilfe von Erweiterungsmethoden des Quellobjekts zu glätten.AutoMapper Abflachung einer Erweiterungsmethode

Quelle:

class Source 
{ 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 
} 

Erweiterungsmethode Ich mag würde zu elegant Karte:

static class SourceExtensions 
{ 
    public static int GetTotal(this Source source) 
    { 
     return source.Value1 + source.Value2; 
    } 
} 

Reiseziel:

class Destination 
{ 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 
    public int Total { get; set; } 
} 

Gibt es einen besseren Weg, als diese (eine, wo ich müssen nicht jede Erweiterungsmethode aufrufen)

using NamespaceContainingMyExtensionMethods; 
... 
Mapper.CreateMap<Source, Destination>() 
    .ForMember(destination => destination.Total, 
     opt => opt.ResolveUsing(source => source.GetTotal())); 

Etwas wie:

Mapper.CreateMap<Source, Destination>() 
    .ResolveUsingExtensionsInNamespace("NamespaceContainingMyExtensionMethods"); 

Ich weiß, dass ich eine Erbschaft Hierarchie auf den Quellobjekte verwenden können, aber in meiner Situation ist es nicht ideal.

Ich habe recherchiert: Does AutoMapper's convention based mappings work with LINQ extension methods? und https://github.com/AutoMapper/AutoMapper/issues/34

Antwort

1

hinzugefügt meine Gabel begehen und eine Pull-Anforderung für diese machen. Klappt wunderbar!

begehen: https://github.com/claycephus/AutoMapper/commit/e1aaf9421c63fb15daca02607d0fc3dff871fbd1

Pull-Anforderung: https://github.com/AutoMapper/AutoMapper/pull/221

konfigurieren es durch die Angabe Baugruppen suchen:

Assembly[] extensionMethodSearch = new Assembly[] { Assembly.Load("Your.Assembly") }; 
Mapper.Initialize(config => config.SourceExtensionMethodSearch = extensionMethodSearch); 
Mapper.CreateMap<Source, Destination>(); 
+0

Da dies auf unser Projekt Umsetzung wir es mehrmals gestolpert. Wir werden es jetzt loswerden. Schon mal das Sprichwort "Zu schlau zum eigenen Besten" gehört? Dies war eine dieser Situationen. Es hat eine Tendenz, einige hinterhältige Laufzeitfehler zu erzeugen, da AutoMapper ein Laufzeitbiest ist, keine Kompilierungszeit. Diese Funktion verschlimmert dieses Problem. Aber hoffentlich ist das für jemanden irgendwann nützlich. – Clay