1111
1212 public static class ServiceCollectionExtensions
1313 {
14+ private static readonly Assembly AutoMapperAssembly = typeof ( Mapper ) . GetTypeInfo ( ) . Assembly ;
15+
16+ private static readonly Action < IMapperConfigurationExpression > DefaultConfig = cfg => { } ;
1417#if DEPENDENCY_MODEL
1518 public static void AddAutoMapper ( this IServiceCollection services )
1619 {
17- services . AddAutoMapper ( DependencyContext . Default ) ;
20+ services . AddAutoMapper ( null , DependencyContext . Default ) ;
21+ }
22+
23+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction )
24+ {
25+ services . AddAutoMapper ( additionalInitAction , DependencyContext . Default ) ;
1826 }
1927
20- public static void AddAutoMapper ( this IServiceCollection services , DependencyContext dependencyContext )
28+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , DependencyContext dependencyContext )
2129 {
22- services . AddAutoMapper ( dependencyContext . RuntimeLibraries
23- . SelectMany ( lib => lib . GetDefaultAssemblyNames ( dependencyContext ) . Select ( Assembly . Load ) ) ) ;
30+ services . AddAutoMapper ( additionalInitAction ,
31+ dependencyContext . RuntimeLibraries
32+ // Only load assemblies that reference AutoMapper
33+ . Where ( lib => lib . Dependencies . Any ( d => d . Name . Equals ( AutoMapperAssembly . GetName ( ) . Name ) ) )
34+ . SelectMany ( lib => lib . GetDefaultAssemblyNames ( dependencyContext )
35+ . Select ( Assembly . Load ) ) ) ;
2436 }
2537#endif
2638
2739 public static void AddAutoMapper ( this IServiceCollection services , params Assembly [ ] assemblies )
2840 {
29- AddAutoMapperClasses ( services , assemblies ) ;
41+ AddAutoMapperClasses ( services , null , assemblies ) ;
3042 }
3143
32- public static void AddAutoMapper ( this IServiceCollection services , IEnumerable < Assembly > assemblies )
44+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , params Assembly [ ] assemblies )
3345 {
34- AddAutoMapperClasses ( services , assemblies ) ;
46+ AddAutoMapperClasses ( services , additionalInitAction , assemblies ) ;
47+ }
48+
49+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , IEnumerable < Assembly > assemblies )
50+ {
51+ AddAutoMapperClasses ( services , additionalInitAction , assemblies ) ;
3552 }
3653
3754 public static void AddAutoMapper ( this IServiceCollection services , params Type [ ] profileAssemblyMarkerTypes )
3855 {
39- AddAutoMapperClasses ( services , profileAssemblyMarkerTypes . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
56+ AddAutoMapperClasses ( services , null , profileAssemblyMarkerTypes . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
4057 }
4158
42- public static void AddAutoMapper ( this IServiceCollection services , IEnumerable < Type > profileAssemblyMarkerTypes )
59+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , params Type [ ] profileAssemblyMarkerTypes )
4360 {
44- AddAutoMapperClasses ( services , profileAssemblyMarkerTypes . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
61+ AddAutoMapperClasses ( services , additionalInitAction , profileAssemblyMarkerTypes . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
4562 }
4663
64+ public static void AddAutoMapper ( this IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , IEnumerable < Type > profileAssemblyMarkerTypes )
65+ {
66+ AddAutoMapperClasses ( services , additionalInitAction , profileAssemblyMarkerTypes . Select ( t => t . GetTypeInfo ( ) . Assembly ) ) ;
67+ }
4768
48- private static void AddAutoMapperClasses ( IServiceCollection services , IEnumerable < Assembly > assembliesToScan )
69+
70+ private static void AddAutoMapperClasses ( IServiceCollection services , Action < IMapperConfigurationExpression > additionalInitAction , IEnumerable < Assembly > assembliesToScan )
4971 {
72+ additionalInitAction = additionalInitAction ?? DefaultConfig ;
5073 assembliesToScan = assembliesToScan as Assembly [ ] ?? assembliesToScan . ToArray ( ) ;
5174
5275 var allTypes = assembliesToScan . SelectMany ( a => a . ExportedTypes ) . ToArray ( ) ;
@@ -58,6 +81,8 @@ private static void AddAutoMapperClasses(IServiceCollection services, IEnumerabl
5881
5982 Mapper . Initialize ( cfg =>
6083 {
84+ additionalInitAction ( cfg ) ;
85+
6186 foreach ( var profile in profiles )
6287 {
6388 cfg . AddProfile ( profile ) ;
0 commit comments