Skip to content
This repository was archived by the owner on May 25, 2023. It is now read-only.

Commit 9543bae

Browse files
committed
Scanning dependency context
1 parent 1171e79 commit 9543bae

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

src/AutoMapper.Extensions.Microsoft.DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,65 @@
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);

src/AutoMapper.Extensions.Microsoft.DependencyInjection/project.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.0.1",
2+
"version": "1.1.0-alpha-*",
33
"authors": [ "Jimmy Bogard" ],
44
"copyright": "Copyright Jimmy Bogard",
55
"description": "AutoMapper extensions for ASP.NET Core",

0 commit comments

Comments
 (0)