2
我正在尋找最簡單/最優雅的方式來使用源對象的擴展方法展平源對象。AutoMapper展開擴展方法
來源:
我想class Source
{
public int Value1 { get; set; }
public int Value2 { get; set; }
}
擴展方法來映射優雅:
static class SourceExtensions
{
public static int GetTotal(this Source source)
{
return source.Value1 + source.Value2;
}
}
目的地:
class Destination
{
public int Value1 { get; set; }
public int Value2 { get; set; }
public int Total { get; set; }
}
是否有比這更好的方式(即一個我不必調用每個擴展方法)?
using NamespaceContainingMyExtensionMethods;
...
Mapper.CreateMap<Source, Destination>()
.ForMember(destination => destination.Total,
opt => opt.ResolveUsing(source => source.GetTotal()));
喜歡的東西:
Mapper.CreateMap<Source, Destination>()
.ResolveUsingExtensionsInNamespace("NamespaceContainingMyExtensionMethods");
我知道我可以在源對象使用一個繼承層次結構,但在我的情況,這是不理想的。
我研究: Does AutoMapper's convention based mappings work with LINQ extension methods?和https://github.com/AutoMapper/AutoMapper/issues/34
由於我們的項目實現這一點,我們偶然發現了好幾遍。我們現在要擺脫它。曾經聽過這樣的說法:「爲了自己的利益而太聰明」?這是其中的一種情況。 它傾向於產生一些偷偷摸摸的運行時錯誤,因爲AutoMapper非常像運行時間的野獸,而不是編譯時的事情。這個功能加劇了這個問題。但希望這有助於某個人有一天。 – Clay 2012-09-18 21:27:22