Skip to content

Commit 9589da5

Browse files
authored
Fix the bug where you cannot register an assembly if you already registered an type in typeresolver (#627)
1 parent 1d70bbc commit 9589da5

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

src/AppModel/NetDaemon.AppModel.Tests/TypeResolver/TypeResolverTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public class FakeClass
7070
_ => new FakeOptions(Path.Combine(AppContext.BaseDirectory,
7171
Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic"))));
7272
serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object);
73-
serviceCollection.AddAppModel();
74-
serviceCollection.AddAppTypeResolver();
73+
serviceCollection.AddAppModelIfNotExist();
74+
serviceCollection.AddAppTypeResolverIfNotExist();
7575
serviceCollection.AddSingleton<CompilerFactory>();
7676
serviceCollection.AddSingleton<ICompilerFactory>(s => s.GetRequiredService<CompilerFactory>());
7777
serviceCollection.AddSingleton<DynamicallyCompiledAssemblyResolver>();
@@ -126,8 +126,8 @@ public class FakeClass
126126
_ => new FakeOptions(Path.Combine(AppContext.BaseDirectory,
127127
Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic"))));
128128
serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object);
129-
serviceCollection.AddAppModel();
130-
serviceCollection.AddAppTypeResolver();
129+
serviceCollection.AddAppModelIfNotExist();
130+
serviceCollection.AddAppTypeResolverIfNotExist();
131131
serviceCollection.AddSingleton<CompilerFactory>();
132132
serviceCollection.AddSingleton<ICompilerFactory>(s => s.GetRequiredService<CompilerFactory>());
133133
serviceCollection.AddSingleton<DynamicallyCompiledAssemblyResolver>();
@@ -184,8 +184,8 @@ public class FakeClass
184184
_ => new FakeOptions(Path.Combine(AppContext.BaseDirectory,
185185
Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic"))));
186186
serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object);
187-
serviceCollection.AddAppModel();
188-
serviceCollection.AddAppTypeResolver();
187+
serviceCollection.AddAppModelIfNotExist();
188+
serviceCollection.AddAppTypeResolverIfNotExist();
189189
serviceCollection.AddSingleton<CompilerFactory>();
190190
serviceCollection.AddSingleton<ICompilerFactory>(s => s.GetRequiredService<CompilerFactory>());
191191
serviceCollection.AddSingleton<DynamicallyCompiledAssemblyResolver>();

src/AppModel/NetDaemon.AppModel/Common/Extensions/ServiceCollectionExtension.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)