gpt4 book ai didi

c# - AutoMapper 展平扩展方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:23 25 4
gpt4 key购买 nike

我正在寻找使用源对象的扩展方法来展平源对象的最简单/最优雅的方法。

来源:

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

最佳答案

将提交添加到我的分支并为此发出拉取请求。就像一个魅力!

提交:https://github.com/claycephus/AutoMapper/commit/e1aaf9421c63fb15daca02607d0fc3dff871fbd1

拉取请求:https://github.com/AutoMapper/AutoMapper/pull/221

通过指定要搜索的程序集来配置它:

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

关于c# - AutoMapper 展平扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com