diff --git a/src/AppModel/NetDaemon.AppModel.Tests/TypeResolver/TypeResolverTests.cs b/src/AppModel/NetDaemon.AppModel.Tests/TypeResolver/TypeResolverTests.cs index bb8ed4606..cbc061504 100644 --- a/src/AppModel/NetDaemon.AppModel.Tests/TypeResolver/TypeResolverTests.cs +++ b/src/AppModel/NetDaemon.AppModel.Tests/TypeResolver/TypeResolverTests.cs @@ -70,8 +70,8 @@ public class FakeClass _ => new FakeOptions(Path.Combine(AppContext.BaseDirectory, Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic")))); serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object); - serviceCollection.AddAppModel(); - serviceCollection.AddAppTypeResolver(); + serviceCollection.AddAppModelIfNotExist(); + serviceCollection.AddAppTypeResolverIfNotExist(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(s => s.GetRequiredService()); serviceCollection.AddSingleton(); @@ -126,8 +126,8 @@ public class FakeClass _ => new FakeOptions(Path.Combine(AppContext.BaseDirectory, Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic")))); serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object); - serviceCollection.AddAppModel(); - serviceCollection.AddAppTypeResolver(); + serviceCollection.AddAppModelIfNotExist(); + serviceCollection.AddAppTypeResolverIfNotExist(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(s => s.GetRequiredService()); serviceCollection.AddSingleton(); @@ -184,8 +184,8 @@ public class FakeClass _ => new FakeOptions(Path.Combine(AppContext.BaseDirectory, Path.Combine(AppContext.BaseDirectory, "Fixtures/Dynamic")))); serviceCollection.AddSingleton(_ => syntaxTreeResolverMock.Object); - serviceCollection.AddAppModel(); - serviceCollection.AddAppTypeResolver(); + serviceCollection.AddAppModelIfNotExist(); + serviceCollection.AddAppTypeResolverIfNotExist(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(s => s.GetRequiredService()); serviceCollection.AddSingleton(); diff --git a/src/AppModel/NetDaemon.AppModel/Common/Extensions/ServiceCollectionExtension.cs b/src/AppModel/NetDaemon.AppModel/Common/Extensions/ServiceCollectionExtension.cs index d173f8453..541ebe642 100644 --- a/src/AppModel/NetDaemon.AppModel/Common/Extensions/ServiceCollectionExtension.cs +++ b/src/AppModel/NetDaemon.AppModel/Common/Extensions/ServiceCollectionExtension.cs @@ -16,14 +16,10 @@ public static class ServiceCollectionExtensions /// The assembly loading apps from public static IServiceCollection AddAppsFromAssembly(this IServiceCollection services, Assembly assembly) { - // We make sure we only add AppModel services once - if (!services.Any(n => n.ImplementationType == typeof(AppModelImpl))) - services - .AddAppModel() - .AddAppTypeResolver(); - - services.AddSingleton(new AssemblyResolver(assembly)); - return services; + return services + .AddAppModelIfNotExist() + .AddAppTypeResolverIfNotExist() + .AddSingleton(new AssemblyResolver(assembly)); } /// @@ -33,11 +29,9 @@ public static IServiceCollection AddAppsFromAssembly(this IServiceCollection ser /// The type of the app to add public static IServiceCollection AddAppFromType(this IServiceCollection services, Type type) { - // We make sure we only add AppModel services once - if (services.All(n => n.ImplementationType != typeof(AppModelImpl))) - services.AddAppModel(); - - return services.AddSingleton(new SingleAppResolver(type)); + return services + .AddAppModelIfNotExist() + .AddSingleton(new SingleAppResolver(type)); } /// @@ -47,17 +41,15 @@ public static IServiceCollection AddAppFromType(this IServiceCollection services public static IServiceCollection AddAppsFromSource(this IServiceCollection services) { // We make sure we only add AppModel services once - if (services.All(n => n.ImplementationType != typeof(AppModelImpl))) - services - .AddAppModel() - .AddAppTypeResolver(); - + services + .AddAppModelIfNotExist() + .AddAppTypeResolverIfNotExist() .AddSingleton() .AddSingleton(s => s.GetRequiredService()) .AddSingleton() .AddSingleton(s => s.GetRequiredService()); - + // We need to compile it here so we can dynamically add the service providers var assemblyResolver = ActivatorUtilities.CreateInstance(services.BuildServiceProvider()); @@ -84,8 +76,12 @@ private static IServiceCollection RegisterDynamicFunctions(this IServiceCollecti return services; } - internal static IServiceCollection AddAppModel(this IServiceCollection services) + internal static IServiceCollection AddAppModelIfNotExist(this IServiceCollection services) { + // Check if we already registered + if (services.Any(n => n.ImplementationType == typeof(AppModelImpl))) + return services; + services .AddSingleton() .AddSingleton(s => s.GetRequiredService()) @@ -97,8 +93,12 @@ internal static IServiceCollection AddAppModel(this IServiceCollection services) return services; } - internal static IServiceCollection AddAppTypeResolver(this IServiceCollection services) + internal static IServiceCollection AddAppTypeResolverIfNotExist(this IServiceCollection services) { + // Check if we already registered + if (services.Any(n => n.ImplementationType == typeof(AppTypeResolver))) + return services; + services .AddSingleton() .AddSingleton(s => s.GetRequiredService());