Я просто собрал собственный AutoMapper ValueResolver, чтобы попытаться сопоставить условие из мой объект домена в логическое свойство в модели представления MVC, и это настолько просто, что я чувствую, что должен быть встроенный способ делать то, что я пытаюсь сделать, без настраиваемого преобразователя.
Логика, которую я пытаюсь реализовать, заключается в том, что если «MyDomainObject.MyStatus» равен «StatusCode.Inactive», то значение, сопоставленное модели представления («MyViewModel.CanRemove»), должно быть ложным.
Вот мой (упрощенный) пример:
// Domain Object:
public class MyDomainObject
{
public int Id{get;set;}
public StatusCode MyStatus{get;set;}
}
public enum StatusCode
{
Active,
Inactive
}
// View Model:
public class MyViewModel
{
public int Id{get;set;}
public bool CanRemove{get;set;}
}
// My custom resolver
public class BooleanValueResolver<T> : ValueResolver<T,bool>
{
private readonly Func<T, bool> _condition;
public BooleanValueResolver(Func<T,bool> condition)
{
_condition = condition;
}
protected override bool ResolveCore(T source)
{
return _condition(source);
}
}
// My AutoMapper mapping:
public class MyMappingProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<MyDomainObject, MyViewModel>()
.ForMember(viewModel => viewModel.CanRemove,
opt => opt.ResolveUsing(new BooleanValueResolver<MyDomainObject>(domainObject => !domainObject.MyStatus.Equals(StatusCode.Inactive))));
}
}
Кто-нибудь знает, можно ли добиться такого поведения без использования моего настраиваемого ValueResolver?