首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Automapper -如何映射到构造函数参数而不是属性设置器

Automapper -如何映射到构造函数参数而不是属性设置器
EN

Stack Overflow用户
提问于 2010-02-11 01:55:14
回答 5查看 61.4K关注 0票数 117

在我的目标setter是私有的情况下,我可能希望使用目标对象的构造函数映射到该对象。你将如何使用Automapper来做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-11 03:21:03

使用ConstructUsing

这将允许您指定在映射期间使用哪个构造函数。但随后所有其他属性将根据约定自动映射。

还要注意,这与ConvertUsing的不同之处在于,convert using将不会继续通过约定进行映射,而是让您完全控制映射。

代码语言:javascript
复制
Mapper.CreateMap<ObjectFrom, ObjectTo>()
    .ConstructUsing(x => new ObjectTo(arg0, arg1, etc));

..。

代码语言:javascript
复制
using AutoMapper;
using NUnit.Framework;

namespace UnitTests
{
    [TestFixture]
    public class Tester
    {
        [Test]
        public void Test_ConstructUsing()
        {
            Mapper.CreateMap<ObjectFrom, ObjectTo>()
                .ConstructUsing(x => new ObjectTo(x.Name));

            var from = new ObjectFrom { Name = "Jon", Age = 25 };

            ObjectTo to = Mapper.Map<ObjectFrom, ObjectTo>(from);

            Assert.That(to.Name, Is.EqualTo(from.Name));
            Assert.That(to.Age, Is.EqualTo(from.Age));
        }
    }

    public class ObjectFrom
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    public class ObjectTo
    {
        private readonly string _name;

        public ObjectTo(string name)
        {
            _name = name;
        }

        public string Name
        {
            get { return _name; }
        }

        public int Age { get; set; }
    }
}
票数 160
EN

Stack Overflow用户

发布于 2017-08-07 01:09:27

最佳做法是使用AutoMapper http://docs.automapper.org/en/stable/Construction.html中记录在案的方法

代码语言:javascript
复制
public class SourceDto
{
        public SourceDto(int valueParamSomeOtherName)
        {
            Value = valueParamSomeOtherName;
        }

        public int Value { get; }
}

Mapper.Initialize(cfg => cfg.CreateMap<Source, SourceDto>()
  .ForCtorParam(
    "valueParamSomeOtherName", 
    opt => opt.MapFrom(src => src.Value)
  )
);
票数 14
EN

Stack Overflow用户

发布于 2014-03-01 03:22:01

您应该使用允许您设置目的地的Map方法。例如:

代码语言:javascript
复制
Mapper.CreateMap<ObjectFrom, ObjectTo>()

var from = new ObjectFrom { Name = "Jon", Age = 25 };

var to = Mapper.Map(from, new ObjectTo(param1));
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2239143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档