Я использую ValueInjecter для сопоставления свойств из модели Домена с DTO, обслуживаемым через Сервисный уровень. Данная служба также принимает обновления ... поэтому передается обновленный DTO, который затем внедряется в объект домена и сохраняется.
// Domain
public class Member
{
public Country Country { get; set; }
}
public class Country
{
public string Code { get; set; }
public string Name { get; set; }
}
//Dto
public class MemberDto
{
public string CountryCode { get; set; }
}
//Transformation Method attempt 1
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto);
return source;
}
Теперь весь приведенный выше код обновляет Property Member.Country.Code, что явно не то, что мне нужно.
Итак, из документов я решил, что мне нужно создать переопределение, и получил это:
public class CountryLookup: UnflatLoopValueInjection<string, Country>
{
protected override Country SetValue(string sourcePropertyValue)
{
return countryService.LookupCode(sourcePropertyValue);
}
}
//revised transformation call
//Transformation Method attempt 2
public Member InjectFromDto (MemberDto dto, Member source)
{
source = source.InjectFrom<UnflatLoopValueInjection>(dto)
.InjectFrom<CountryLookup>(dto);
return source;
}
Моя проблема во время отладки, CountryLookup никогда не вызывается.
Возможные причины, по которым я могу придумать:
- Классы прокси Nhibernate, приводящие к тому, что значение injecter не соответствует типу Country? Это не имеет смысла, потому что это работает во время выравнивания.
- Возможно, почему-то расстегивание не срабатывает. Т.е. Dto является CountryCode, а Domain является Country.Code
Мне нужно использовать свойство CountryCode в Dto для вызова countryService.LookupCode для возврата правильного объекта, который будет использоваться во время внедрения обновления.