C#でAutoMapperを操作する方法

AutoMapperは、異なるタイプに属するオブジェクトをマッピングするために使用できる、人気のあるオブジェクト間マッピングライブラリです。例として、アプリケーションのDTO(データ転送オブジェクト)をモデルオブジェクトにマップする必要がある場合があります。AutoMapperを使用すると、このような互換性のないタイプの1つ以上のプロパティを手動でマップするという面倒な作業を省くことができます。

AutoMapperの使用を開始するには、Visual Studioでプロジェクトを作成してから、AutoMapperをインストールする必要があります。NuGetパッケージマネージャーコンソールウィンドウで次のコマンドを使用して、NuGetからAutoMapperをインストールできます。

PM>インストール-パッケージAutoMapper

AutoMapperを使用してマッピングを作成する

AutoMapperなどのオブジェクト間マッパーは、あるタイプの入力オブジェクトを別のタイプの出力オブジェクトに変換します。次の2つのクラスについて考えてみます。

 パブリッククラスAuthorModel

    {{

        public int Id

        {{

            取得する; セットする;

        }

        パブリック文字列FirstName

        {{

            get; set;

        }

        パブリック文字列LastName

        {{

            取得する; セットする;

        }

        パブリック文字列アドレス

        {{

            取得する; セットする;

        }

    }

 パブリッククラスAuthorDTO

    {{

        public int Id

        {{

            取得する; セットする;

        }

        パブリック文字列FirstName

        {{

            取得する; セットする;

        }

        パブリック文字列LastName

        {{

            取得する; セットする;

        }

        パブリック文字列アドレス

        {{

            取得する; セットする;

        }

    }

次のコードスニペットは、これら2つのタイプ(AuthorModelとAuthorDTO)の間にマップを作成する方法を示しています。

var config = new MapperConfiguration(cfg => {

                cfg.CreateMap();

            });

次に、タイプ間のマッピングを実行するのは、次のコードが示すように簡単です。

IMapper iMapper = config.CreateMapper();

var source = new AuthorModel();

var destination = iMapper.Map(source);

AutoMapperの例 

それでは、いくつかのデータを操作してみましょう。一部のデータをソースオブジェクトに格納し、マッピングが完了した後に宛先オブジェクトのプロパティ値を表示する次のコードを参照してください。

var config = new MapperConfiguration(cfg => {

                cfg.CreateMap();

            });

IMapper iMapper = config.CreateMapper();

var source = new AuthorModel();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "インド";

var destination = iMapper.Map(source);

Console.WriteLine( "作成者名:" + destination.FirstName + "" + destination.LastName);

上記のコードを実行すると、宛先オブジェクト内に保存されている作成者名が表示されます。ただし、AutoMapperを使用してオブジェクトを正常にマップしたため、宛先FirstNameプロパティと宛先LastNameプロパティの値はソースオブジェクトと同じになります。

AutoMapperは、クラスの任意のセットをマップできることに注意してください。ただし、AutoMapperは特定の規則に従います。その1つは、マップされるプロパティ名が同じ名前である必要があるということです。プロパティ名が同一でない場合は、プロパティのマッピング方法をAutoMapperに通知する必要があります。2つのプロパティContactとContactDetailsをマッピングする場合、次の例はこれを実現する方法を示しています。

var config = new MapperConfiguration(cfg => {

                cfg.CreateMap()

                .ForMember(destination => destination.ContactDetails、

               opts => opts.MapFrom(source => source.Contact));

            });

宛先オブジェクトを作成するために使用される次のステートメントに注意してください。

var destination = iMapper.Map(source);

宛先オブジェクトがすでに存在する場合は、代わりに以下のステートメントを使用できます。

iMapper.Map(sourceObject、destinationObject);

本質的に、上記のコードスニペットは、すでに存在する2つのオブジェクトをマップするために使用できます。

AutoMapperでプロジェクションを使用する

AutoMapperは、投影の優れたサポートを提供します。射影は、ソースの構造と一致しない宛先にソース値をマップするために使用されます。(対照的に、上記で説明したマッピングは1対1のマッピングでした。)

それでは、投影法を見てみましょう。たとえば、次のクラスについて考えてみます。

 パブリッククラスアドレス

    {{

        public string City {get; セットする; }

        パブリック文字列状態{取得; セットする; }

        パブリック文字列国{取得; セットする; }

    }

AuthorModelクラスでAddressクラスを使用して、作成者のアドレス情報を格納してみましょう。更新されたAuthorModelクラスは次のようになります。

 パブリッククラスAuthorModel

    {{

        public int Id

        {{

            取得する; セットする;

        }

        パブリック文字列FirstName

        {{

            get; set;

        }

        パブリック文字列LastName

        {{

            取得する; セットする;

        }

        パブリックアドレスアドレス

        {{

            取得する; セットする;

        }

    }

 そして、これが更新されたAuthorDTOクラスです。

パブリッククラスAuthorDTO

    {{

        public int Id

        {{

            取得する; セットする;

        }

        パブリック文字列FirstName

        {{

            取得する; セットする;

        }

        パブリック文字列LastName

        {{

            取得する; セットする;

        }

        public string City {get; セットする; }

        パブリック文字列状態{取得; セットする; }

        パブリック文字列国{取得; セットする; }

    }

ここで、AuthorDTOクラスとAuthorModelクラスをマップする必要があるとします。次のコードスニペットは、これを実現する方法を示しています。

var config = new MapperConfiguration(cfg => {

                cfg.CreateMap()

                   .ForMember(destination => destination.Address、

              map => map.MapFrom(

                  ソース=>新しいアドレス

                  {{

                      City = source .City、

                      状態=ソース.State、

                      国= source.Country

                  }));

AutoMapperのより高度な機能については、今後の投稿で説明します。それまでは、このリンクでAutoMapperの詳細を学ぶことができます。

C#でさらに多くのことを行う方法:

  • C#で抽象クラスとインターフェイスを使用する場合
  • C#でAutoMapperを操作する方法
  • C#でラムダ式を使用する方法
  • C#でAction、Func、およびPredicateデリゲートを操作する方法
  • C#でデリゲートを操作する方法
  • C#で簡単なロガーを実装する方法
  • C#で属性を操作する方法
  • C#でlog4netを操作する方法
  • C#でリポジトリデザインパターンを実装する方法
  • C#でリフレクションを操作する方法
  • C#でfilesystemwatcherを操作する方法
  • C#でレイジー初期化を実行する方法
  • C#でMSMQを操作する方法
  • C#で拡張メソッドを操作する方法
  • C#でラムダ式を使用する方法
  • C#でvolatileキーワードを使用する場合
  • C#でyieldキーワードを使用する方法
  • C#でポリモーフィズムを実装する方法
  • C#で独自のタスクスケジューラを構築する方法
  • C#でRabbitMQを操作する方法
  • C#でタプルを操作する方法
  • C#での仮想メソッドと抽象メソッドの調査