Я просто собрал пользовательский 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