より転載
https://www.cnblogs.com/NCoreCoder/p/11359294.html
9.0へのアップグレードAutoMapper 2019年8月12日
もはやサポートの静的変換オブジェクトありません
彼女は一瞬のために自身で、拡張機能のセットを書き込みます
下記の公式リンク
https://github.com/AutoMapper/AutoMapper/tree/v9.0.0
私はシンプルで使いやすいパッケージのビットを行います
パブリック静的クラスAutoMapperExtension { パブリック静的IServiceCollection AddAutoMapper(このIServiceCollectionサービス) { service.TryAddSingleton <MapperConfigurationExpression>(); service.TryAddSingleton(サービス・プロバイダ=> { VAR mapperConfigurationExpression = serviceProvider.GetRequiredService <MapperConfigurationExpression>(); VARインスタンス=新しいMapperConfiguration(mapperConfigurationExpression); instance.AssertConfigurationIsValid(); 戻りインスタンス; }); service.TryAddSingleton(サービス・プロバイダ=> { VAR mapperConfiguration = serviceProvider.GetRequiredService <MapperConfiguration>(); リターンmapperConfiguration.CreateMapper(); }); サービスを返します。 } パブリック静的IMapperConfigurationExpression UseAutoMapper(このIApplicationBuilder applicationBuilder) { リターンapplicationBuilder.ApplicationServices.GetRequiredService <MapperConfigurationExpression>(); } }
呼び出すと、ConfigureServices方法で行を追加することです
services.AddAutoMapper();
方法の設定に次のコードを追加します。
VAR式= app.UseAutoMapper()。 expression.CreateMap <フー、FoodDto>();
これはAutoMapperのDI版を完了します
以下の例のコードを呼び出します
パブリッククラスValuesController:ControllerBase { プライベートIMapperマッパー{取得します。} 公共ValuesController(IMapperマッパー) { マッパー=マッパー。 } // GETのAPI /値 [HTTPGET] パブリックFoodDtoのGet() { VARモデル=新しいはFoo() { ID = Guid.NewGuid()、 NAME = "テスト"、 金= 15.0メートル }。 リターンMapper.Map <FoodDto>(モデル); } }
試験結果は次の通りであります
しかし、これだけは使いやすい、十分ではありません、それはまた、静的なヘルパーが必要です
コードは以下の通りです
パブリック静的クラスAutoMapperHelper { プライベート静的IServiceProviderのServiceProvider。 パブリック静的ボイドUseStateAutoMapper(このIApplicationBuilder applicationBuilder) { のServiceProvider = applicationBuilder.ApplicationServices。 } パブリック静的TDestination地図<TDestination>(オブジェクトソース) { VARマッパー= ServiceProvider.GetRequiredService <IMapper>(); リターンmapper.Map <TDestination>(ソース)。 } パブリック静的TDestination地図<TSOURCE、TDestination>(TSOURCE源) { VARマッパー= ServiceProvider.GetRequiredService <IMapper>(); リターンmapper.Map <TSOURCE、TDestination>(ソース)。 } }
コード方式のラインで同様に増大構成
app.UseStateAutoMapper();
アクションについての呼び出しを追加します
[HTTPGET( "静的")] パブリックFoodDto静的() { VARモデル=新しいはFoo() { ID = Guid.NewGuid()、 NAME = "テスト"、 金= 15.0メートル }。 リターンAutoMapperHelper.Map <FoodDto>(モデル); }
次の結果を呼び出します
実際には、この更新は思考で唯一のシフトであり、完了、利便性が、それはほんの少しの事です
彼は2つの拡張メソッドを追加し、王を某兄の要請で招待されました
パブリック静的クラスAutoMapperHelper { ... パブリック静的TDestination MapTo <TSOURCE、TDestination>(このTSOURCE源) { VARマッパー= ServiceProvider.GetRequiredService <IMapper>(); リターンmapper.Map <TSOURCE、TDestination>(ソース)。 } パブリック静的TDestination MapTo <TDestination>(このオブジェクトのソース) { VARマッパー= ServiceProvider.GetRequiredService <IMapper>(); リターンmapper.Map <TDestination>(ソース)。 } }
テストケースを変更します
[HTTPGET( "静的")] パブリックFoodDto静的() { VARモデル=新しいはFoo() { ID = Guid.NewGuid()、 NAME = "テスト"、 金= 15.0メートル }。 リターンmodel.MapTo <FoodDto>(); } // [HTTPGET( "静的")] //公衆FoodDto静的() // { // VARモデル=新しいはFoo() // { // ID = Guid.NewGuid() //名前= "テスト" 、 //マネー= 15.0メートル //}; //リターンmodel.MapTo <フー、 //}