Automapper: CreateMap, но для свойства, которое еще не инициализировано - PullRequest
1 голос
/ 18 мая 2011

Как я могу создать карту с помощью Automapper, когда в базовом типе назначения свойство еще не инициализировано?

Пример:

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 еще не инициализирован.Я не могу инициализировать объект самостоятельно, потому что класс UserAccount является Datacontract интерфейса службы WCF.Я должен сам создать Dicationary и присвоить его свойству.

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

Как я могу решить эту проблему с Automapper?Или мой подход не имеет смысла?

1 Ответ

0 голосов
/ 20 мая 2011

Единственный способ сделать что-то подобное - написать класс, реализующий AutoMapper.IValueResolver. Тогда opt.MapFrom... становится opt.ResolveUsing....FromMember... Возможно, в этот момент вашим пунктом назначения является весь словарь (я думаю, что если вы пропустите FromMember, вы получите весь объект в своем преобразователе

в вашей реализации IValueResolver.Resolve, попробуйте взломать отладчик и проверить ResolutionContext в source.Context, затем, как только вы построите свой словарь, верните source.New(myDictionary)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...