C〓〓中AutoMapperの使い方

5699 ワード

訳文:https://www.infoworld.com/art
AutoMapperは非常に人気のあるObject-to-objectマッピングライブラリです。目的は異なるタイプのオブジェクト間のマッピングを実現することです。例えば、DDD開発モードでは、DojectをModel objectにマッピングすることを実現する必要があります。AutoMapperはこの冗長なテンプレートコードのマッチングに時間を節約することができます。
AutoMapperをプレイする前に、Visual StudioでProjectを作成し、AutoMapperをインストールする必要があります。NuGetからダウンロードできます。NuGet Package Manager Cosoneコンソールに以下のコマンドを入力してください。

PM> Install-Package AutoMapper
AutoMapperを使ってマッピング関係を作成します。
AutoMapperのようなobject-to-objectマッピングツールは、入力タイプを別の出力タイプに変換することができるようにしなければなりません。

  public class AuthorModel
  {
    public int Id
    {
      get; set;
    }
    public string FirstName
    {
      get;set;
    }
    public string LastName
    {
      get; set;
    }
    public string Address
    {
      get; set;
    }
  }

  public class AuthorDTO
  {
    public int Id
    {
      get; set;
    }
    public string FirstName
    {
      get; set;
    }
    public string LastName
    {
      get; set;
    }
    public string Address
    {
      get; set;
    }
  }
次に、次のコードセグメントはAuthorModelとAuthortDotoの2つのオブジェクトの間でAutoMapperを使ってmapping関係を作成する方法を教えます。

var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<AuthorModel, AuthorDTO>();
      });
最終的なmapping変換には、以下のコードをいくつか追加して、二つのタイプの間の変換を実現する必要があります。

IMapper iMapper = config.CreateMapper();
var source = new AuthorModel();
var destination = iMapper.Map<AuthorModel, AuthorDTO>(source);
一つのAutoMapperの例
次にいくつかのデータにアクセスできます。下記のコードセグメントを参考にして、まずsource ojectに値を付けて、AutoMapperのMap方法を実行した後、destination ojectにそのまま表示するつもりです。

var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<AuthorModel, AuthorDTO>();
      });
IMapper iMapper = config.CreateMapper();
var source = new AuthorModel();
source.Id = 1;
source.FirstName = "Joydip";
source.LastName = "Kanjilal";
source.Address = "India";
var destination = iMapper.Map<AuthorModel, AuthorDTO>(source);
Console.WriteLine("Author Name: "+ destination.FirstName + " " + destination.LastName);
このコードを実行した後、destination object上のAuthor Nameはコンソールに出力されます。ターゲットのFirst NameとLastNameとsource oject上のこの二つの属性値は一致しています。
注目すべきは、AutoMapperは一つのカテゴリーだけではなく、Mappingの複数のクラスもありますが、デフォルトではAutoMapperはデフォルトの約束通りにマッチします。つまり、mappingのオブジェクト間に同じ属性名を持っていてこそ、マッピングされることができます。このときは人工介入指定mapping関係をAutoMapperに設定された通り実行させる必要があります。ContactからContact Detailsまでのマッピングを実現する必要があると仮定して、以下の例ではどのようにこの関係を実現するかを示しています。

var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<AuthorModel, AuthorDTO>()
        .ForMember(destination => destination.ContactDetails,
        opts => opts.MapFrom(source => source.Contact));
      });
次の文は最終的なdestination objectオブジェクトを作成します。

var destination = iMapper.Map<AuthorModel, AuthorDTO>(source);
destination objectを生成している場合もありますが、これに基づいて二回マッピングしたい場合は、次の代替文を使用してもいいです。

iMapper.Map(sourceObject, destinationObject);
本質的には、上のこのコードは2つの既存のobjectと整合するためによく使われる。
AutoMappingを使ったプロモーション機能
AutoMapperは非常に良いprojection機能を提供しています。🐂👃の場所は、mappingマッピングにおいて、両者のobjectデータ構造が一致しているかどうかを無視することができます。例えば、sourceの複数の属性をdestinationの一つの属性にマッピングします。上で私たちが議論しているのは全部一対のoject mappingです。
次に私たちは一緒にプロモーションを勉強します。例を挙げて、次のような種類を考えます。

  public class Address
  {
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
  }
次にAuthorModelクラスにAuthorのアドレス情報を格納するためにAddress属性を追加し、修正後のAuthorModelクラスは以下の通りである。

  public class AuthorModel
  {
    public int Id
    {
      get; set;
    }
    public string FirstName
    {
      get;set;
    }
    public string LastName
    {
      get; set;
    }
    public Address Address
    {
      get; set;
    }
  }
そしてAuthortDTOクラスを更新します。

  public class AuthorDTO
  {
    public int Id
    {
      get; set;
    }
    public string FirstName
    {
      get; set;
    }
    public string LastName
    {
      get; set;
    }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
  }
次にAuthortmodelにAuthortmodelを写像する必要があります。次のコードセグメントはどのように実現するかを示しています。

var config = new MapperConfiguration(cfg => {
        cfg.CreateMap<AuthorDTO, AuthorModel>()
          .ForMember(destination => destination.Address,
       map => map.MapFrom(
         source => new Address
         {
           City = source .City,
           State = source .State,
           Country = source.Country
         }));
後の文章でAutoMapperのより多くの高級な特性について議論し続けます。今はこのリンクを通じて、より多くのAutoMapperの知識を学ぶことができます。
もっと高品質のドラック:私のGitHubを参照してください。http://automapper.org/
以上がC〓〓〓の中でAutoMapperの使用方法の詳しい内容で、更にC〓AutoMapperの使う資料に関して私達のその他の関連している文章に関心を持って下さい!