Automapper: есть ли встроенный способ отобразить условие из исходного объекта в логическое значение на цели? - PullRequest
1 голос
/ 26 октября 2010

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

2 голосов
/ 26 октября 2010

Я думаю, что это будет эквивалентно (с использованием встроенного в Automapper MapFrom):

.ForMember(d => d.CanRemove, o => o.MapFrom(s => s.MyStatus.Equals(StatusCode.Inactive))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...