From c487033aadbd2094d57e57f19e8fb37c44817dd4 Mon Sep 17 00:00:00 2001 From: Macocian Alexandru Victor Date: Fri, 9 Sep 2022 19:42:55 +0200 Subject: [PATCH] Extend ServiceCollectionExtensions (#25) * Make ServiceCollectionExtensions use IServiceCollection * Extend the collectionextensions to use an existing service manager --- .../ServiceCollectionExtensionsTests.cs | 13 +++++++++++ .../ServiceCollectionExtensions.cs | 22 ++++++++++++++----- Slim.Integration/Slim.Integration.csproj | 6 ++--- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Slim.Integration.Tests/ServiceCollectionExtensionsTests.cs b/Slim.Integration.Tests/ServiceCollectionExtensionsTests.cs index 69675f7..d080f29 100644 --- a/Slim.Integration.Tests/ServiceCollectionExtensionsTests.cs +++ b/Slim.Integration.Tests/ServiceCollectionExtensionsTests.cs @@ -191,4 +191,17 @@ public sealed class ServiceCollectionExtensionsTests services.Should().HaveCount(0); } + + [TestMethod] + public void BuildSlimServiceProvider_WithExistingServiceManager_UsesExistingServiceManager() + { + var serviceManager = new ServiceManager(); + serviceManager.RegisterSingleton(); + var serviceCollection = new Microsoft.Extensions.DependencyInjection.ServiceCollection(); + var serviceProvider = serviceCollection.BuildSlimServiceProvider(serviceManager); + + var testService = serviceProvider.GetRequiredService(); + + testService.Should().NotBeNull(); + } } diff --git a/Slim.Integration/ServiceCollection/ServiceCollectionExtensions.cs b/Slim.Integration/ServiceCollection/ServiceCollectionExtensions.cs index a4e7385..b86a3f8 100644 --- a/Slim.Integration/ServiceCollection/ServiceCollectionExtensions.cs +++ b/Slim.Integration/ServiceCollection/ServiceCollectionExtensions.cs @@ -4,10 +4,12 @@ using Microsoft.Extensions.DependencyInjection; namespace Slim.Integration.ServiceCollection; public static class ServiceCollectionExtensions { - public static System.IServiceProvider BuildSlimServiceProvider(this Microsoft.Extensions.DependencyInjection.ServiceCollection serviceCollection) + public static System.IServiceProvider BuildSlimServiceProvider(this IServiceCollection serviceCollection, IServiceManager serviceManager) { - var serviceManager = new ServiceManager(); - foreach(var serviceDescriptor in serviceCollection) + _ = serviceCollection ?? throw new ArgumentNullException(nameof(serviceCollection)); + _ = serviceManager ?? throw new ArgumentNullException(nameof(serviceManager)); + + foreach (var serviceDescriptor in serviceCollection) { switch (serviceDescriptor.Lifetime) { @@ -29,6 +31,14 @@ public static class ServiceCollectionExtensions return serviceManager; } + public static System.IServiceProvider BuildSlimServiceProvider(this IServiceCollection serviceCollection) + { + _ = serviceCollection ?? throw new ArgumentNullException(nameof(serviceCollection)); + + var serviceManager = new ServiceManager(); + return serviceCollection.BuildSlimServiceProvider(serviceManager); + } + private static void RegisterServiceProviderDependencies(IServiceManager serviceManager) { serviceManager.RegisterResolver(new IEnumerableResolver()); @@ -36,7 +46,7 @@ public static class ServiceCollectionExtensions serviceManager.RegisterScoped(); } - private static void RegisterSingleton(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor) + private static void RegisterSingleton(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor) { if (serviceDescriptor.ImplementationInstance is null && serviceDescriptor.ImplementationFactory is not null) @@ -54,7 +64,7 @@ public static class ServiceCollectionExtensions } } - private static void RegisterScoped(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor) + private static void RegisterScoped(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor) { if (serviceDescriptor.ImplementationInstance is null && serviceDescriptor.ImplementationFactory is not null) @@ -72,7 +82,7 @@ public static class ServiceCollectionExtensions } } - private static void RegisterTransient(ServiceManager serviceManager, ServiceDescriptor serviceDescriptor) + private static void RegisterTransient(IServiceManager serviceManager, ServiceDescriptor serviceDescriptor) { if (serviceDescriptor.ImplementationInstance is null && serviceDescriptor.ImplementationFactory is not null) diff --git a/Slim.Integration/Slim.Integration.csproj b/Slim.Integration/Slim.Integration.csproj index 48bf97f..4020360 100644 --- a/Slim.Integration/Slim.Integration.csproj +++ b/Slim.Integration/Slim.Integration.csproj @@ -8,10 +8,10 @@ Integration with Microsoft.DependencyInjection library. - 1.0.2 - 1.0.2 + 1.0.3 + 1.0.3 https://github.com/AlexMacocian/Slim - 1.0.2 + 1.0.3 true true LICENSE