[再印刷] AutoMapper 9.0の変換

より転載

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 <フー、
        //}

おすすめ

転載: www.cnblogs.com/hx215267863/p/11957728.html