ディレクトリ
、マッピングソースとマッピングクラスDTOクラス定義
II注射AutoMapper
3、との間のマッピング
4つの書き込みテストを
定義されたマッピングオブジェクト源
AutoMapperマッピング機能を反映するには、Name属性がSocialAttribute人々で定義されていない、人民耳プロパティがSocialAttributeとPhysicalAttributeには存在しません。
コードは以下の通りであります:
/// <要約> /// 身体属性 /// </要約> パブリック クラスPhysicalAttribute { 公共の 文字列目{ 取得します。セット; } パブリック 文字列口{ 得ます。セット; } }
/// <要約> /// 社会属性 /// </要約> パブリック クラスSocialAttribute { 公共の int型の年齢{ 取得します。セット; } パブリック ブール IsMarried { 得ます。セット; } パブリック 文字列名前{ 得ます。セット; } }
パブリック クラスPeopleDto { 公共の 文字列目{ 取得します。セット; } パブリック 文字列口{ 得ます。セット; } パブリック 文字列耳{ 取得します。セット; } 公共の int型年齢{ 取得します。セット; } パブリック ブール IsMarried { 得ます。セット; } }
第二に、注入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