NetCore + AutoMapperオブジェクトは、複数のオブジェクトDTOにマップ

 

ディレクトリ

、マッピングソースとマッピングクラスDTOクラス定義
II注射AutoMapper
3、との間のマッピング
4つの書き込みテストを

 

定義されたマッピングオブジェクト源

AutoMapperマッピング機能を反映するには、Name属性がSocialAttribute人々で定義されていない、人民耳プロパティがSocialAttributeとPhysicalAttributeには存在しません。

 

 

 コードは以下の通りであります:

    ///  <要約> 
    /// 身体属性
     ///  </要約> 
    パブリック クラスPhysicalAttribute 
    { 
        公共の 文字列目{ 取得しますセット; }
         パブリック 文字列口{ 得ますセット; } 
    }
物理的属性
    ///  <要約> 
    /// 社会属性
     ///  </要約> 
    パブリック クラスSocialAttribute 
    { 
        公共の int型の年齢{ 取得しますセット; }
         パブリック ブール IsMarried { 得ますセット; }
         パブリック 文字列名前{ 得ますセット; } 
    }
SocialAttribute
    パブリック クラスPeopleDto 
    { 
        公共の 文字列目{ 取得しますセット; }
         パブリック 文字列口{ 得ますセット; }
         パブリック 文字列耳{ 取得しますセット; }
         公共の int型年齢{ 取得しますセット; }
         パブリック ブール IsMarried { 得ますセット; } 
    }
PeopleDto

 

第二に、注入AutoMapper

実施例で使用されるIOC容器はAutofac、Autofac使用されていない、のみ継承NetCore IOCコンテナフレームを実現することができます。

AutoMapper必要なコンポーネントを登録:

    パブリック 静的 クラスAutoMapperInjection 
    { 
        パブリック 静的 ContainerBuilder LoadAutoMapper(このContainerBuilderビルダー)
        { 
            builder.RegisterType <MapperConfigurationExpression> ().SingleInstance(); 
            builder.Register(M => {
                 VAR mapperConfigurationExpression = m.Resolve <MapperConfigurationExpression> ();
                 VARのインスタンス= 新しいMapperConfiguration(mapperConfigurationExpression);
                 戻りインスタンス; 
            }); 
            builder.Register(M=> {
                 VAR mapperConfiguration = m.Resolve <MapperConfiguration> ();
                返すmapperConfiguration.CreateMapperを(); 
            }); 
            リターン・ビルダー。
            
        } 
    }

 

第三に、コンフィギュレーション・マッピング

ForMember:二つのクラス間の属性マッピング関係。

耳の人々クラス属性は、任意のマップソースクラスに存在しない、我々はForMemberを使用することができます(M => m.Ear、N => n.Ignore())属性は無視され、当然のことながら、このコードを書くことができません、 AutoMapperは上の任意の影響を持っているが、後者を維持するために、より便利ではありません、私はクラス全体DTOの属性を書き込むより慣れています。

プロパティSocialAttributeクラスは、単にそれを無視し、人々のクラスに存在しない名前、名前はAutoMapperを割り当てられません。

    パブリック クラスAutoMapperProfile:プロファイル
    { 
        公共 ボイドマッピング(ILifetimeScopeスコープ){ 

            VARの発現= scope.Resolve <MapperConfigurationExpression> (); 
            expression.CreateMap <PhysicalAttribute、PeopleDto> ()
            .ForMember(M => m.Eye、N => n.MapFrom(S => s.Eye))
            .ForMember(M => m.Mouth、N => N。 MapFrom(S => s.Mouth))。
            // .ForMember(M => m.Ear、N => n.Ignore()); 
            expression.CreateMap <SocialAttribute、PeopleDto> ()
                .ForMember(M => m.Age、N => n.MapFrom(S =>s.Age))
                .ForMember(M => m.IsMarried、N => n.MapFrom(S => s.IsMarried))。
        } 
    }

第四に、テスト実行

使用のxUnitテストフレームワーク

    パブリック クラスDtoHelperTest 
    { 
        [ファクト] 
        公共 ボイドGetDto(){
             // MOKE 
            ContainerBuilderビルダー= 新しいContainerBuilder()。
            builder.LoadAutoMapper(); 
            builder.RegisterType <AutoMapperProfile> (); 
            いるIContainerコンテナ = builder.Build()。
            使用VARスコープ= Container.BeginLifetimeScope())
            { 
                scope.Resolve <AutoMapperProfile> ().Mapping(スコープ)
                PeopleDto結果 =新しい PeopleDto(){アイ= " 双眼皮"、口= " 红润"、年齢= 18、IsMarried = }。
                PhysicalAttribute物理 = 新しい PhysicalAttribute(){アイ= " 双眼皮"、口= " 红润" }。
                SocialAttribute社会的 = 新しい SocialAttribute(){NAME = " 张三"、IsMarried = falseを、年齢= 18  }。
                PeopleDto出力 = 新しいですDtoHelper(scope.Resolve <IMapper> ())GetDto(物理的、社会的)。
                // Assert.Same(その結果、出力)。
                Assert.Equal(JsonConvert.SerializeObject(結果)、JsonConvert.SerializeObject(出力))。
            } 

        } 
    }

試験により!

 

 参考プロジェクト:https://github.com/FB208/CodeSpace/tree/master/CodeSpace.CSharp/WebMvc/DemoClass/AutoMapperDemo

おすすめ

転載: www.cnblogs.com/fb208/p/11548250.html