2012-01-11 7 views
3

V2.0に移行した後、私はこの問題にAutomapperマッププロパティ

をキャッチ私はこのようなプロパティをマッピングしてみてください。

public class SurveyFormView 
{ 
    public MultiSelectList Statistics { get; set; } 
} 
public class SurveyForm 
{ 

    ICollection<Statistic> statistics = new List<Statistic>(); 
    public virtual ICollection<Statistic> Statistics 
    { 
     get { return statistics; } 
     set { statistics = value; } 
    } 
} 


Mapper.CreateMap<SurveyForm, SurveyFormView>(). 
      ForMember(x => x.Statistics, 
         m => 
         m.MapFrom(x => new MultiSelectList(x.Statistics))). 

私はマッピングを使用する場合:model = Mapper.Map<SurveyForm, SurveyFormView>(item); を私が手:

[ArgumentException: Type 'System.Web.Mvc.MultiSelectList' does not have a default constructor] 
    System.Linq.Expressions.Expression.New(Type type) +2741878 
    AutoMapper.<>c__DisplayClass1.<CreateCtor>b__0(Type t) in c:\dev\AutoMapper\src\AutoMapper\Internal\DelegateFactory.cs:142 
    System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +72 
    AutoMapper.DelegateFactory.CreateCtor(Type type) in c:\dev\AutoMapper\src\AutoMapper\Internal\DelegateFactory.cs:140 
    AutoMapper.Mappers.ObjectCreator.CreateObject(Type type) in c:\dev\AutoMapper\src\AutoMapper\Mappers\ObjectCreator.cs:47 
    AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.CreateObject(ResolutionContext context) in c:\dev\AutoMapper\src\AutoMapper\MappingEngine.cs:362 
    AutoMapper.Mappers.EnumerableMapperBase`1.CreateDestinationObject(ResolutionContext context, Type destinationElementType, Int32 count, IMappingEngineRunner mapper) in c:\dev\AutoMapper\src\AutoMapper\Mappers\EnumerableMapperBase.cs:64 
    AutoMapper.Mappers.EnumerableMapperBase`1.Map(ResolutionContext context, IMappingEngineRunner mapper) in c:\dev\AutoMapper\src\AutoMapper\Mappers\EnumerableMapperBase.cs:21 
    AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) in c:\dev\AutoMapper\src\AutoMapper\MappingEngine.cs:303 

答えて

0

パラメータのないコンストラクタを使用せずに宛先タイプにマップする必要がある場合は、MapFromの代わりにConstructUsingを使用する必要があります。

Mapper.CreateMap<ICollection<Statistic>, MultiSelectList>() 
    .ConstructUsing(c => new MultiSelectList(c)); 
Mapper.CreateMap<SurveyForm, SurveyFormView>(); 

IEnumerableとしてソースコレクションをご登録の場合にも動作します:

Mapper.CreateMap<IEnumerable, MultiSelectList>() 
    .ConstructUsing(c => new MultiSelectList(c));