ホームページ > バックエンド開発 > C#.Net チュートリアル > C# での AutoMapper アプリケーションの例

C# での AutoMapper アプリケーションの例

黄舟
リリース: 2018-05-15 11:37:47
オリジナル
3607 人が閲覧しました

私は最近、AutoMapper という興味深いものを発見しました。これは、主にモデルを DTO に変換します。DTO は、ドメイン オブジェクトの動作をプレゼンテーション層に過度に公開しないように、データにさらに注意を払い、ドメイン オブジェクトを合理的にカプセル化します。

まず、2 つのクラス間のマッピングの例をいくつか見てみましょう。

まず、Source と DTOSource の 2 つのクラスを定義します。

public class Source
    {
        public int Id { get; set; }
        public string Content { get; set; }
    }

    public class DTOSource
    {
        public int Id { get; set; }
        public string Content { get; set; }
    }
ログイン後にコピー

Source フィールドと DTOSource フィールドは、AutoMapper を通じてどのように変換されるかを見てみましょう。コードは非常に簡単です。

Mapper.Initialize(x=>{
     x.CreateMap<Source,DTOSource>();
});

Source s = new Source{Id=1,Content="123"};

DTOSource dto = Mapper.Map<DTOSource>(s);
ログイン後にコピー

最初のステップは、Source インスタンスと DTOSource の間のマッピングを確立することです。Source インスタンスを初期化した後、実行結果を確認します。

実行が完了すると、dto とこれは、2 つのクラスのフィールド名がまったく同じである場合に当てはまります。では、DTOSource のフィールド名が Source のフィールド名と異なる場合はどうなるでしょうか。実際には非常に簡単です。

を少しコードに変更するだけです。

現時点では、マッピング関係を確立するときにフィールドを指定するだけです。

1 Mapper.Initialize(x => {
2    x.CreateMap<Source, DTOSource>().ForMember(c=>c.Desc,q=> {
3       q.MapFrom(z => z.Content);
4      });
5 });
ログイン後にコピー

見てみましょう 実行結果を見てみましょう

結果が前の実行結果と同じであることがわかります。

つまり、2 つのリストをマップする方法は実際には非常に簡単で、最後のステップに少し変更が必要なだけです。次のコードに示すように:

Mapper.Initialize(x => {
                x.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q =>
                {
                    q.MapFrom(z => z.Content);
                });
            });

            s.Add(new Source { Id = 1, Content = "123" });

            var dto = Mapper.Map<List<DTOSource>>(s);
ログイン後にコピー

コードの最後の文を除いて、他の部分はほぼ同じであることがわかりますが、コードの最後の文でターゲットの型が List に変更されている点が異なります。これですべてです。実行結果を見てみましょう:

結果は期待どおりです。

実際のプロジェクトでは、この書き方は絶対に要件を満たしません。一般に、カプセル化は、Profile を継承する新しい SourceProfile を作成するために行われます。

1  public SourceProfile()
2         {
3             base.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
4                 q.MapFrom(z => z.Content);
5             });
6         }
ログイン後にコピー

すべてのマッピング関係は、プログラム内でこのクラスに記述することができます。初期化中に一度呼び出すだけです:

 
1
 Mapper.Initialize(x =>{  x.AddProfile<SourceProfile>(); });
ログイン後にコピー

ブロガーが使用している AutoMapper のバージョンは 6.1.1.0 です。AutoMapper はバージョン 6.0 で Configure を削除したため、バージョン 6.0 以前の記述方法とは少し異なります。バージョン 6.0 より前のバージョンは :

public class SourceProfile : Profile
    {
        protected override void Configure()
        {
            CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
                q.MapFrom(z => z.Content);
            });
        }
    }
ログイン後にコピー

Profile を継承してその Configure を書き換えるだけで、呼び出し方法は上記とあまり変わりません。 Mapper.Initialize には 1 つ以上のプロファイルを追加できます。

MVC プロジェクトのアプリケーションでは、Mapper.Initialize をクラスにカプセル化できます

 public static class AutoMapperForMvc
    {        public  static void Register()
        {
            Mapper.Initialize(x => {
                x.AddProfile<SourceProfile>();
            });
        }

    }
ログイン後にコピー

次に、それを MVC Global に一度登録します。

以上がC# での AutoMapper アプリケーションの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート