Automapper: есть ли встроенный способ сопоставить условие исходного объекта с логическим значением на целевом объекте?

Я просто собрал собственный 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?

1
задан beta-tank 14 March 2016 в 05:13
поделиться