自动格式化程序不是触发器

时间:2011-04-20 17:07:49

标签: automapper

我有格式化程序

    public class ColorFormatter : IValueFormatter
    {
        public string FormatValue(ResolutionContext context)
        {
            return "green"
        }
    }

Mapper.CreateMap<MyClass, MyViewModel>().ForMember(dest => dest.color, opt => opt.AddFormatter<ColorFormatter>());

MyClass没有任何名为bgColor但MyViewModel没有,我希望所有的bgColors都有“绿色”。

那为什么不被触发?

MYClass中的其他所有内容都成功映射到MyViewModel。

List<MyViewModel> vm = Mapper.Map<List<MyClass>, List<MyViewModel>>(myClasses);

[Serializable]
    public class MyClass
    {
        public virtual int Id { get; private set; }
        public virtual string Title { get; set; }
        public virtual DateTime Start { get; set; }
        public virtual DateTime End { get; set; }
        public virtual string Description { get; set; }
        public virtual string Where { get; set; }
        public virtual bool AllDay { get; set; }
        public virtual AnotherClass AnotherClass { get; set; }
        public virtual int RepeatingId { get; set; }
    }


     public class MyViewModel
    {
        public int id { get; set; }
        public string title { get; set; }
        public bool allDay { get; set; }
        public string start { get; set; }
        public string end { get; set; }
        public string color { get; set; }
        public string appointmentId { get; set; }
        public string textColor { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

ValueFormatter仅在具有要格式化的源值时应用。如果您将Color属性添加到MyClass类,那么您将看到应用颜色“绿色”。我不确定这是否是一个AutoMapper错误,因为如果没有要映射的源值,它通常会抱怨。我猜它假设你申请.ForMember()然后它不再自动检查这些东西,它依靠你来确保映射是正确的。而不是使用ValueFormatter,使用ValueResolver返回如下字符串:

Mapper.CreateMap<MyClass, MyViewModel>().ForMember(dest => dest.color, opt => opt.ResolveUsing<ColorResolver>());

public class ColorResolver : ValueResolver<MyClass, string>
{
    protected override string ResolveCore(MyClass source)
    {
        return "green";
    }
}