Automapper:CreateMap但是对于尚未初始化的属性

时间:2011-05-18 14:37:27

标签: automapper

如果在基础目标类型中尚未初始化属性,我如何使用Automapper创建Map?

示例:

public class UserAccount
{
   public string name { get; set; }
   public Dictionary<string,string> properties { get; set; }
}

public class UserAccountOtherType
{
   public string name { get; set; }
   public string Property1 {get;set; }
}

public static UserAccount CustomMap(UserAccountOtherType type2)
{
   AutoMapper.Mapper.CreateMap<UserAccount,UserAccountOtherType>()
             .ForMember(dest => dest.properties["Property1", opt => opt.MapFrom(src => (string)src.Property1));

 return AutoMapper.Mapper.Map<UserAccount,UserAccountOtherType>(type2);

}

当我尝试执行此代码时,它会失败,因为UserAccount中的Dictionary尚未初始化。我无法自己初始化Object,因为UserAccount类是WCF Service接口的Datacontract。 我必须自己创建一个Dicationary并将其分配给该物业。

UserAccount b = new UserAccount();
Dictionary<string,string> properties = new Dictionary<string,string>();
b.properties = properties;

如何使用Automapper解决这个问题?或者我的方法没有意义?

1 个答案:

答案 0 :(得分:0)

我只能想到做这样的事情就是编写一个实现AutoMapper.IValueResolver的类。然后opt.MapFrom...变为opt.ResolveUsing....FromMember...可能此时您的目的地是整个字典(我想如果您遗漏FromMember,您将整个对象放入您的解析器

IValueResolver.Resolve的实施中,尝试进入调试器并查看ResolutionContext中的source.Context,然后在构建完字典后,返回source.New(myDictionary)