@@ -16,14 +16,10 @@ public static class ServiceCollectionExtensions
1616 /// <param name="assembly">The assembly loading apps from</param>
1717 public static IServiceCollection AddAppsFromAssembly ( this IServiceCollection services , Assembly assembly )
1818 {
19- // We make sure we only add AppModel services once
20- if ( ! services . Any ( n => n . ImplementationType == typeof ( AppModelImpl ) ) )
21- services
22- . AddAppModel ( )
23- . AddAppTypeResolver ( ) ;
24-
25- services . AddSingleton < IAssemblyResolver > ( new AssemblyResolver ( assembly ) ) ;
26- return services ;
19+ return services
20+ . AddAppModelIfNotExist ( )
21+ . AddAppTypeResolverIfNotExist ( )
22+ . AddSingleton < IAssemblyResolver > ( new AssemblyResolver ( assembly ) ) ;
2723 }
2824
2925 /// <summary>
@@ -33,11 +29,9 @@ public static IServiceCollection AddAppsFromAssembly(this IServiceCollection ser
3329 /// <param name="type">The type of the app to add</param>
3430 public static IServiceCollection AddAppFromType ( this IServiceCollection services , Type type )
3531 {
36- // We make sure we only add AppModel services once
37- if ( services . All ( n => n . ImplementationType != typeof ( AppModelImpl ) ) )
38- services . AddAppModel ( ) ;
39-
40- return services . AddSingleton < IAppTypeResolver > ( new SingleAppResolver ( type ) ) ;
32+ return services
33+ . AddAppModelIfNotExist ( )
34+ . AddSingleton < IAppTypeResolver > ( new SingleAppResolver ( type ) ) ;
4135 }
4236
4337 /// <summary>
@@ -47,17 +41,15 @@ public static IServiceCollection AddAppFromType(this IServiceCollection services
4741 public static IServiceCollection AddAppsFromSource ( this IServiceCollection services )
4842 {
4943 // We make sure we only add AppModel services once
50- if ( services . All ( n => n . ImplementationType != typeof ( AppModelImpl ) ) )
51- services
52- . AddAppModel ( )
53- . AddAppTypeResolver ( ) ;
54-
44+
5545 services
46+ . AddAppModelIfNotExist ( )
47+ . AddAppTypeResolverIfNotExist ( )
5648 . AddSingleton < CompilerFactory > ( )
5749 . AddSingleton < ICompilerFactory > ( s => s . GetRequiredService < CompilerFactory > ( ) )
5850 . AddSingleton < SyntaxTreeResolver > ( )
5951 . AddSingleton < ISyntaxTreeResolver > ( s => s . GetRequiredService < SyntaxTreeResolver > ( ) ) ;
60-
52+
6153 // We need to compile it here so we can dynamically add the service providers
6254 var assemblyResolver =
6355 ActivatorUtilities . CreateInstance < DynamicallyCompiledAssemblyResolver > ( services . BuildServiceProvider ( ) ) ;
@@ -84,8 +76,12 @@ private static IServiceCollection RegisterDynamicFunctions(this IServiceCollecti
8476 return services ;
8577 }
8678
87- internal static IServiceCollection AddAppModel ( this IServiceCollection services )
79+ internal static IServiceCollection AddAppModelIfNotExist ( this IServiceCollection services )
8880 {
81+ // Check if we already registered
82+ if ( services . Any ( n => n . ImplementationType == typeof ( AppModelImpl ) ) )
83+ return services ;
84+
8985 services
9086 . AddSingleton < AppModelImpl > ( )
9187 . AddSingleton < IAppModel > ( s => s . GetRequiredService < AppModelImpl > ( ) )
@@ -97,8 +93,12 @@ internal static IServiceCollection AddAppModel(this IServiceCollection services)
9793 return services ;
9894 }
9995
100- internal static IServiceCollection AddAppTypeResolver ( this IServiceCollection services )
96+ internal static IServiceCollection AddAppTypeResolverIfNotExist ( this IServiceCollection services )
10197 {
98+ // Check if we already registered
99+ if ( services . Any ( n => n . ImplementationType == typeof ( AppTypeResolver ) ) )
100+ return services ;
101+
102102 services
103103 . AddSingleton < AppTypeResolver > ( )
104104 . AddSingleton < IAppTypeResolver > ( s => s . GetRequiredService < AppTypeResolver > ( ) ) ;
0 commit comments