Automapper:是否有内置的方法将条件从源对象映射到目标上的布尔值?

时间:2010-10-25 20:18:04

标签: automapper

我只是将一个自定义的AutoMapper ValueResolver放在一起,试图将我的域对象中的条件映射到MVC视图模型上的布尔属性,这很简单,我觉得必须有一个内置的方法来在没有自定义解析器的情况下做我想做的事。

我试图实现的逻辑是,如果“MyDomainObject.MyStatus”等于“StatusCode.Inactive”,则映射到视图模型的值(“MyViewModel.CanRemove”)应为false。

这是我的(简化)示例:

// 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 个答案:

答案 0 :(得分:2)

我认为这是等效的(使用Automapper的内置MapFrom):

.ForMember(d => d.CanRemove, o => o.MapFrom(s => s.MyStatus.Equals(StatusCode.Inactive))