2016-02-07 3 views
22

https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-APIAutoMapper静的APIからの移行

この変更によってシステムが壊れます。更新前の

、私が使用します。

===> Startup.cs

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
    ... 
     MyAutoMapperConfiguration.Configure(); 
    } 
} 

===> MyAutoMapperConfiguration.cs

public class MyAutoMapperConfiguration 
{ 
    public static void Configure() 
    { 
     Mapper.Initialize(a => 
     { 
      a.AddProfile<AbcMappingProfile>(); 
      a.AddProfile<XyzMappingProfile>(); 
      a.AddProfile<QweMappingProfile>(); 
     }); 
    } 
} 

===> AbcMappingProfile.cs

public class AbcMappingProfile : Profile 
{ 
    protected override void Configure() 
    { 
     Mapper.CreateMap<AbcEditViewModel, Abc>(); 
     Mapper.CreateMap<Abc, AbcEditViewModel>(); 
     ... 
    } 
} 

エラー:

'Mapper.CreateMap()'は廃止されました: '静的APIはバージョン5.0で削除されます。 MapperConfigurationインスタンスを使用し、必要に応じて静的に格納します。 CreateMapperを使用してマッパーインストーラーを作成します。 '

私はMapper.Mapを使用できます。今、どのように私はそれが

答えて

40

の代わりに使用することができます。

Mapper.CreateMap<AbcEditViewModel, Abc>(); 

新しい構文は次のとおりです。

var config = new MapperConfiguration(cfg => { 
    cfg.CreateMap<AbcEditViewModel, Abc>(); 
}); 
その後

IMapper mapper = config.CreateMapper(); 
var source = new AbcEditViewModel(); 
var dest = mapper.Map<AbcEditViewModel, Abct>(source); 

Source with more examples

+0

このすべてはOPが... – DavidG

+0

代わりマッパーのリンクのドキュメントです。初期化(?私はリンクの中で見つけることができません –

+4

はい、AutoMapperを設定するためにStartup.csで何をするべきか、そしてそれをコントローラでどのように使用するのかについて多くの混乱があります。それは今注射する必要がありますか? –

9

の代わりにAutomapperプロファイルの使用IMapperConfigurationExpression拡張子:

マッピングの設定:

public static class AutoMapperConfig 
{ 
    public static IMapperConfigurationExpression AddAdminMapping(
     this IMapperConfigurationExpression configurationExpression) 
    { 
     configurationExpression.CreateMap<Job, JobRow>() 
      .ForMember(x => x.StartedOnDateTime, o => o.PreCondition(p => p.StartedOnDateTimeUtc.HasValue)) 
      .ForMember(x => x.StartedOnDateTime, o => o.MapFrom(p => p.StartedOnDateTimeUtc.Value.DateTime.ToLocalTime())) 
      .ForMember(x => x.FinishedOnDateTime, o => o.PreCondition(p => p.FinishedOnDateTimeUtc.HasValue)) 
      .ForMember(x => x.FinishedOnDateTime, o => o.MapFrom(p => p.FinishedOnDateTimeUtc.Value.DateTime.ToLocalTime())); 

     return configurationExpression; 
    } 
} 

統合(Startup.csなど):

 var mappingConfig = new AutoMapper.MapperConfiguration(cfg => 
     { 
      cfg.AddAdminMapping(); 
     }); 

     services.AddSingleton(x => mappingConfig.CreateMapper()); 
+0

このコンテキストで 'サービス'とは何ですか?また、マッパーをMVCコントローラにどのように組み込むのですか? –

+0

@PetrusTheronサービスはAsp.net Core FWによって 'public void ConfigureServices(IServiceCollection services)'メソッドに注入される 'IServiceCollection'です。 –

関連する問題