自动映射:转换为具有多个构造函数的模型

时间:2016-05-30 05:09:01

标签: automapper structuremap

//Mapping:
this.CreateMap<PartModel, Part>().ConstructUsingServiceLocator();

//Model
[Table("Car")]
public class Car
{
    public Car(IUser user)
    {
    }

    public Car()
    {
    }
    public IList<Part> Parts { get; set; }
}



  [Table("Part")]
public class Part
{
    public Part(IUser user)
    {
    }

    public Part()
    {
    }

}

public class CarsViewModel
{
    public IList<PartViewModel> Parts{ get; set; }
}

我正在使用ConstructorUsingServiceLocator(),以便Automapper使用带有IUser参数的构造函数实例化Part模型。 当我执行以下映射时:

//carViewModel holds multiple parts
var car = this.mapper.Map<Car>(carViewModel);

汽车拥有多个零件模型。但是它们都具有相同的属性。看起来构造函数只被调用一次并且正在重用该对象。我使用结构图作为我的DI容器。有没有一种简单的方法可以不重用零件对象?

1 个答案:

答案 0 :(得分:0)

如果您将IUser作为要映射到第二个类构造函数参数的第一个类的参数,则可以使用。

Mapper.Initialize(cfg => cfg.CreateMap<FromT, ToT>()
    .ForCtorParam("CtorParamName", opt => opt.MapFrom(src => src.MyIUser))
);