2010-10-25 25 views
1

我只是把一個自定義的AutoMapper ValueResolver放在一起,試圖將一個條件從我的域對象映射到MVC視圖模型上的一個布爾屬性,而且非常簡單,我感覺必須有一種內置的方式來執行沒有自定義解析器,我正在嘗試做什麼。Automapper:是否有內置的方法將源對象中的條件映射到目標上的布爾值?

我試圖實現的邏輯是,如果「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?

回答

2

我認爲這將是等效的(使用Automapper的內置MapFrom):

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

是的,這樣的作品,感謝帕特里克! – 2010-10-26 17:53:29

相關問題