@@ -29,6 +29,10 @@ public void CreateProfile(string profileName, Action<IProfileExpression> config)
2929
3030 private class NamedProfile : Profile
3131 {
32+ public NamedProfile ( string profileName ) : base ( profileName )
33+ {
34+ }
35+
3236 public NamedProfile ( string profileName , Action < IProfileExpression > config ) : base ( profileName , config )
3337 {
3438 }
@@ -44,41 +48,62 @@ public void AddProfile(Profile profile)
4448 public void AddProfile ( Type profileType ) => AddProfile ( ( Profile ) Activator . CreateInstance ( profileType ) ) ;
4549
4650 public void AddProfiles ( IEnumerable < Assembly > assembliesToScan )
47- => AddProfilesCore ( assembliesToScan ) ;
51+ => AddMaps ( assembliesToScan ) ;
4852
4953 public void AddProfiles ( params Assembly [ ] assembliesToScan )
50- => AddProfilesCore ( assembliesToScan ) ;
54+ => AddMaps ( assembliesToScan ) ;
5155
5256 public void AddProfiles ( IEnumerable < string > assemblyNamesToScan )
53- => AddProfilesCore ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
57+ => AddMaps ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
5458
5559 public void AddProfiles ( params string [ ] assemblyNamesToScan )
56- => AddProfilesCore ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
60+ => AddMaps ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
5761
5862 public void AddProfiles ( IEnumerable < Type > typesFromAssembliesContainingProfiles )
59- => AddProfilesCore ( typesFromAssembliesContainingProfiles . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
63+ => AddMaps ( typesFromAssembliesContainingProfiles . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
6064
6165 public void AddProfiles ( params Type [ ] typesFromAssembliesContainingProfiles )
62- => AddProfilesCore ( typesFromAssembliesContainingProfiles . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
66+ => AddMaps ( typesFromAssembliesContainingProfiles . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
67+
68+ public void AddMaps ( IEnumerable < Assembly > assembliesToScan )
69+ => AddMapsCore ( assembliesToScan ) ;
70+
71+ public void AddMaps ( params Assembly [ ] assembliesToScan )
72+ => AddMapsCore ( assembliesToScan ) ;
73+
74+ public void AddMaps ( IEnumerable < string > assemblyNamesToScan )
75+ => AddMapsCore ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
6376
64- private void AddProfilesCore ( IEnumerable < Assembly > assembliesToScan )
77+ public void AddMaps ( params string [ ] assemblyNamesToScan )
78+ => AddMapsCore ( assemblyNamesToScan . Select ( name => Assembly . Load ( new AssemblyName ( name ) ) ) ) ;
79+
80+ public void AddMaps ( IEnumerable < Type > typesFromAssembliesContainingMappingDefinitions )
81+ => AddMapsCore ( typesFromAssembliesContainingMappingDefinitions . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
82+
83+ public void AddMaps ( params Type [ ] typesFromAssembliesContainingMappingDefinitions )
84+ => AddMapsCore ( typesFromAssembliesContainingMappingDefinitions . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
85+
86+ private void AddMapsCore ( IEnumerable < Assembly > assembliesToScan )
6587 {
6688 var allTypes = assembliesToScan . Where ( a => ! a . IsDynamic ) . SelectMany ( a => a . GetDefinedTypes ( ) ) . ToArray ( ) ;
89+ var autoMapAttributeProfile = new NamedProfile ( nameof ( AutoMapAttribute ) ) ;
6790
68- var profiles =
69- allTypes
70- . Where ( t => typeof ( Profile ) . GetTypeInfo ( ) . IsAssignableFrom ( t ) )
71- . Where ( t => ! t . IsAbstract )
72- . Select ( t => t . AsType ( ) ) ;
73-
74- foreach ( var profile in profiles )
91+ foreach ( var type in allTypes )
7592 {
76- AddProfile ( profile ) ;
93+ if ( typeof ( Profile ) . IsAssignableFrom ( type ) && ! type . IsAbstract )
94+ {
95+ AddProfile ( type . AsType ( ) ) ;
96+ }
97+ foreach ( var autoMapAttribute in type . GetCustomAttributes < AutoMapAttribute > ( ) )
98+ {
99+ var mappingExpression = autoMapAttributeProfile . CreateMap ( autoMapAttribute . SourceType , type ) ;
100+ autoMapAttribute . ApplyConfiguration ( mappingExpression ) ;
101+ }
77102 }
78103
104+ AddProfile ( autoMapAttributeProfile ) ;
79105 }
80106
81-
82107 public void ConstructServicesUsing ( Func < Type , object > constructor ) => ServiceCtor = constructor ;
83108 }
84109}
0 commit comments